に格納されていました。
それはQueryRunnerのqueryメソッドを呼ぶ際に引数にArrayListHandlerを渡している為です。
これを直接Beanに入れて返してもらうようにするにはBeanListHandlerというのを
使います。
使い方はこんな感じです。
ArrayList<User> users = (ArrayList<User>)qr.query(con, "select * from User;", new BeanListHandler(User.class));
for (User user : users) {
String result = Integer.toString(user.getId());
String result2 = user.getName();
System.out.println("Result = " + result + ", " + result2);
}
BeanListHandlerをqueryの引数とする事でUserというBeanを要素とするArrayListが返ってくるようになりました。
このBeanListHandlerを使うことで、よく行う検索結果をBeanに入れる処理を
省略できます。
Bean内のプロパティ名は検索テーブルの列名と合わせておく必要があります。
検索対象が一列と分かっている場合にはBeanListHandlerではなく
BeanHandlerを使えば、そのままBeanに入って帰ってきます。
他にもqueryメソッドに渡す引数のResultSetHandlerを実装したクラスには
以下のようなものがあります。
・MapHandler・・・列名をキーにしたMapを返すもの
・MapListHandler・・・MapHandlerをリストにしたもの
・ScalarHandler・・・指定した列番号(列名)の値を返すもの。count * とかで使うと良いです。
また、自分でResultSetHandlerを実装したクラスを作れば
より自由度の高いものが作成できます。
ResultSetHandler<Object[]> rsh = new ResultSetHandler<Object[]>(){
@Override
public Object[] handle(ResultSet resultset) throws SQLException {
if (!resultset.next()) {
return null;
}
ResultSetMetaData meta = resultset.getMetaData(); //テーブル情報取得
int cols = meta.getColumnCount(); //カラム数取得
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = resultset.getObject(i + 1); //値取得(indexは1~)
}
if (!resultset.next()) {
return null;
}
for (int i = 0; i < cols; i++) {
result[i] = result[i].toString() + "-" + resultset.getObject(i + 1).toString();
}
return result;
}
こんな感じの匿名クラス作ってみました。
1行目と2行目の内容を-で繋いで返すだけ。
試しに作っただけで実用性は無いです。
見てのとおり、handleメソッドを用意する必要があります。
handleメソッドは引数としてResultSetがわたってくるので、そこから値を取って
returnしてあげれば良いです。
使い方はqueryメソッドの引数に渡します。
qr.query(con, "select * from User;", rsh);
JSON形式にしてStringで返すのとか作ったら便利そうと思ったり。
1行目と2行目の内容を-で繋いで返すだけ。
試しに作っただけで実用性は無いです。
見てのとおり、handleメソッドを用意する必要があります。
handleメソッドは引数としてResultSetがわたってくるので、そこから値を取って
returnしてあげれば良いです。
使い方はqueryメソッドの引数に渡します。
qr.query(con, "select * from User;", rsh);
JSON形式にしてStringで返すのとか作ったら便利そうと思ったり。