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