コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

JDBCドライバによるテーブル情報の取得

JDBCドライバでちょっと試してみました。
DatabaseMetaDataを利用すれば、かなりいろいろな情報を取得できそうです。

DatabaseMetaDate dbmd = conn.getMetaData();
String schema = "スキーマ名";
String table = "%";
// VIEWや、SYSTEM TABLEは必要な場合
String types[] = { "TABLE", "VIEW", "SYSTEM TABLE" };
ResultSet rs = dbmd.getTables(null, schema, table, types);
while (rs.next()) {
    String tableName= rs.getString("TABLE_NAME");
    System.out.println("「" + schema +  "/" + tableName + "」");
    ResultSet rs2 = dbmd.getColumns(null, schema, tableName, "%");
    while (rs2.next()) {
        System.out.println(
        rs2.getString("COLUMN_NAME")
        + " / "
        + rs2.getString("TYPE_NAME")
        + " / "
        + rs2.getString("COLUMN_SIZE"));
    }
}

という感じでしょうか。
実行すると、スキーマにあるテーブルがすべて表示されます。
上はOracleの例です。
PostgreSQLの場合には、

dbmd.getTables(schema, null, table, types);
dbmd.getColumns(schema, null, tableName, "%");

実行すると、

「IPManager/user_master」
user_id / bpchar / 20
password / varchar / 50
auth / bpchar / 1
kanji_name_f / varchar / 20
kanji_name_l / varchar / 20
kana_name_f / varchar / 20
kana_name_l / varchar / 20
create_user_id / varchar / 20
create_day / timestamp / 8
renew_user_id / varchar / 20
renew_day / timestamp / 8

のような感じで表示されます*1
DB2/400(i5、AS/400)の場合はOracleと同様です。schemaの位置にライブラリー名を記述します。

*1:TYPE_NAMEはDBMSネイティブの型が返されます。