[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 メーリングリストの案内