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

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


 

 
カテゴリー: Javajdbc

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です