カラム名の取得
テーブルに対応するカラムのリストを定義順に取得するコード。Oracleだと、スキーマ名やテーブル名は大文字じゃないとNGだけど、MySqlだと小文字じゃないとダメらしい。
ずっと大文字で指定してて、データ取得できずにかなりはまった・・・。
Map<Integer, String> columns = new TreeMap<Integer, String>();
try {
DatabaseMetaData metaData = con.getMetaData();
// testスキーマのtest_tableのカラム情報を取得
ResultSet resultSet = metaData.getColumns(
con.getCatalog(), schema, table, null);
try {
while (resultSet.next()) {
columns.put(resultSet.getInt("ORDINAL_POSITION"),
resultSet.getString("COLUMN_NAME"));
}
} finally {
resultSet.close();
}
} catch (SQLException e) {
throw new RuntimeException(
String.format("エラー. テーブル名 = [%s]",
table), e);
}
主キーの取得
テーブルに対応する主キー情報を取得するコード。MySqlは、主キーが定義されていないテーブルがあるとSQLExceptionを投げてくれる。
0件取得でいいのに・・・。
Map<Integer, String> primaryKeys = new TreeMap<Integer, String>();
try {
DatabaseMetaData metaData = con.getMetaData();
// testスキーマのtest_tableの主キー情報を取得
ResultSet resultSet = metaData.getPrimaryKeys(
con.getCatalog(), "test", "test_table");
try {
while (resultSet.next()) {
primaryKeys.put(resultSet.getInt("KEY_SEQ"),
resultSet.getString("COLUMN_NAME"));
}
} finally {
resultSet.close();
}
} catch (SQLException e) {
// NOP
}