java.sql.DatabaseMetaData#getTables メソッドの戻り値が null になる問題を解決する。
スポンサーリンク
これ、自分もハマったことがある。
確かに第二引数(スキーマ名)に null を指定すればテーブル名を取得できる。
しかし、Oracle の場合、ALL_TABLES にある全てのテーブル名を取得できてしまうため、ある程度、規模が大きいシステムだと、軽く1,000件ぐらいのレコードが返ってきてしまう。
記憶を頼りに書いているので不正確かもしれないが、Oracle スキーマの特定のユーザーのテーブル名だけを取得したい場合、以下のようにすれば良かったはず。
databaseMetaData.getTables("USER_TABLES", "SCOTT", null, null);
上の例では"SCOTT"をスキーマ名とした。
ポイントはスキーマ名(第二引数)に大文字を指定すること。
全て小文字にしたり、頭文字だけを大文字にしたりすると、null が返ってくる。
最初これに気付いた時、「まさか」と思ったが、どうやら Java (JDBC?Oracle?) の方では融通を効かせてくれないらしい。
参考資料: