カラム名の取得
テーブルに対応するカラムのリストを定義順に取得するコード。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 }