[Seasar-user:2774] Re: SQLServer で列名に英大文字を含むテーブルのSQL自動生成で例外が発生します
西邨 啓一
pyon
2005年 11月 4日 (金) 15:31:44 JST
ひがさん、返信有り難うございます。
> マイクロソフト製のJDBC Driverが正しくDatabaseMetaDataを実装していない
> のが原因だと思いますが、動かないならそうとばかりも言っていられません。
>
> org.seasar.framework.util.DatabaseMetaDataUtil#convertIdentifier()を
> 次のように書き換えるとどうなるでしょうか。
> これでうまくいくならリリースに組み込みたいと思います。
>
> public static String convertIdentifier(DatabaseMetaData dbMetaData,
> String identifier) {
>
> if (identifier == null) {
> return null;
> }
> //System.out.println(dbMetaData.getClass().getName());
> if
> (dbMetaData.getClass().getName().startsWith("com.microsoft.sqlserver")) {
> return identifier;
> }
> if (!supportsMixedCaseIdentifiers(dbMetaData)) {
> if (storesUpperCaseIdentifiers(dbMetaData)) {
> return identifier.toUpperCase();
> }
> return identifier.toLowerCase();
> }
> return identifier;
> }
>
さっそく上記のように変更して試してみましたが、残念ながら変化なしでした。
上記ルーチンは列名の生成の際には影響していない様でした。
(引数identifierがテーブル名の時には通っています)
いろいろと試してみて解ったことなのですが、列名が「顧客CD」の場合は
「顧客cd」でSQL文が生成されますが、「顧客_CD」の場合は正しく生成され
ます。また、列名が「CD」の場合は「cd」で生成されますが、「C_D」の場合は
正しく「C_D」で生成されます。やはりjdbcドライバの問題でしょうか・・・。
現在は、データベース内の全ての列名を小文字に変更してこの問題を回避
しています。
西邨
----- Original Message -----
From: "Yasuo Higa" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Friday, November 04, 2005 10:14 AM
Subject: [Seasar-user:2771] Re: SQLServer で列名に英大文字を含むテーブルのSQL自動生成で例外が発生します
Seasar-user メーリングリストの案内