2009年10月31日

【Commons】MapListHandlerで簡単にSQLの結果を取り扱う

SQLの結果を出力するスクリプトが欲しかったのでCommonsで書いてみた。QueryRunner + MapListHandlerはStatementやResultSetを扱う部分が省略できて便利。


// JRE 1.6.0_07
// Commons dbutils 1.2
// org.apache.commons.dbutils.handlers.MapListHandler
// org.apache.commons.dbutils.QueryRunner
// MapListHandlerを使用して簡易にSQLの結果を取り扱う


String sql = "select * from hoge";

String url = "jdbc:mysql://localhost/dbname";
Connection con = DriverManager.getConnection(url, "user", "passwd");

// QueryRunnerとResultSetHandlerの初期化
// QueryRunnerの初期化にはDataSourceを引数に入れる場合が多いが、
// 今回は実行時にConnectionを直渡しするので引数なし。
QueryRunner qr = new QueryRunner();
ResultSetHandler rsh = new MapListHandler();

// SQL実行
List<Map> list = (List<Map>)qr.query(con, sql, rsh);

// この時点でConnectionは用無しなので閉じる
DbUtils.closeQuietly(con);

// 以下、結果出力
int cnt = 0;
for( Map<String, String> map : list) {
cnt++;
// 1行目のみカラム名も出力する
if( cnt == 1 ) {
for( String key : map.keySet() ) {
System.out.print(key + " | ");
}
System.out.println();
}
// 値を出力する
for( String key : map.keySet() ) {
System.out.print(String.valueOf(map.get(key)) + " | ");
}
System.out.println();
}