雑廉堂の雑記帳

[JDBC:MySQL] Aliasのカラム名をResultsetMetaData#getColumnNameできない件

javaでデータベース絡みのプログラムをするときによくJDBCのお世話になるのですが、あるツールを開発している時につまづいたのでここに覚書としておいておきます。

題名がわかりにくいですが、要するにこういうことです。
たとえば、このSQL、

SELECT somecolumn AS aliascolumn FROM sometable WHERE ...;

このクエリの結果をResultSet に入れてDTOオブジェクトに移す場合、よく私は一旦Map にKey=カラム名、Value=値、という感じで詰め込んで、BeanUtils.populate で、

BeanUtils.populate(dto, map);

とやって、DTOに変換してしまいます。
この変換の際に、ResultsetMetaDataを使ってカラム名を取得してMapに入れるんですが、この時そのカラム名は意図しているAlias名ではなく、元のカラム名で出てきます。

ResultSetMetaData rsmd = rs.getMetaData();
String columnname = rsmd.getColumnName(1);  //  somecolumn

そこで調べてみると、次のように「getColumnLabel(columnId)」すれば良いとありました。

ResultSetMetaData rsmd = rs.getMetaData();
String columnname = rsmd.getColumnLabel(1);  //  aliascolumn

あたりまえのことなのかもしれませんが、初心者独学の身としては小一時間ほど悩んでしまいました。

モバイルバージョンを終了