2015年1月20日火曜日

[JDBC]DatabaseMetaDataから識別子の格納方法を判断する

JDBCのDatabaseMetaDataから、データベースの識別子(テーブル名やカラム名)がどのように格納されているか判断する方法。
DatabaseMetaDataを使ってカラム一覧や主キー一覧などを取得するときには、格納方法を判断して識別子を大文字や小文字に変換してから使用する必要がある。

引用符付きの識別子は、基本使わない(使っとこともない)ので、引用符なしの識別子が大文字、小文字どちらで格納されているかを判断するだけのサンプルコード
// storesMixedCaseIdentifiersで引用符なしの識別子の格納方法を判断する。
// falseが返される場合は、大文字、小文字のどちらかで格納されている。
System.out.println("大文字小文字混在の引用符なし識別子を大文字小文字混在で格納する → " + metaData.storesMixedCaseIdentifiers());

// storesLowerCaseIdentifiersで小文字で格納されているかを判断する。
// trueが返される場合は、小文字で格納されている。
System.out.println("引用符なし識別子を小文字で格納する → " + metaData.storesLowerCaseIdentifiers());

// storesUpperCaseIdentifiersで大文字で格納されているかを判断する。
// trueが返される場合は、大文字で格納されている。
System.out.println("引用符なし識別子を大文字で格納する → " + metaData.storesUpperCaseIdentifiers());

実行結果

Oracleの場合

大文字で格納されていることが分かる
大文字小文字混在の引用符なし識別子を大文字小文字混在で格納する → false
引用符なし識別子を小文字で格納する → false
引用符なし識別子を大文字で格納する → true

PostgreSQLの場合

小文字で格納されていることが分かる
大文字小文字混在の引用符なし識別子を大文字小文字混在で格納する → false
引用符なし識別子を小文字で格納する → true
引用符なし識別子を大文字で格納する → false