量産メモ帳

忘れっぽいのでメモを残しています。

java.sql.DatabaseMetaData#getTables メソッドの戻り値が null になる問題を解決する。

スポンサーリンク

これ、自分もハマったことがある。



確かに第二引数(スキーマ名)に null を指定すればテーブル名を取得できる。


しかし、Oracle の場合、ALL_TABLES にある全てのテーブル名を取得できてしまうため、ある程度、規模が大きいシステムだと、軽く1,000件ぐらいのレコードが返ってきてしまう。


記憶を頼りに書いているので不正確かもしれないが、Oracle スキーマの特定のユーザーのテーブル名だけを取得したい場合、以下のようにすれば良かったはず。

databaseMetaData.getTables("USER_TABLES", "SCOTT", null, null);

上の例では"SCOTT"をスキーマ名とした。


ポイントはスキーマ名(第二引数)に大文字を指定すること。
全て小文字にしたり、頭文字だけを大文字にしたりすると、null が返ってくる。


最初これに気付いた時、「まさか」と思ったが、どうやら Java (JDBCOracle?) の方では融通を効かせてくれないらしい。


参考資料: