QueryRuner类的使用

QueryRunner类的主要方法

public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。

public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection

public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。

public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。

public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

ResultSetHandler接口 

该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)

ResultSetHandler 接口的实现类

ArrayHandler:把结果集中的第一行数据转成对象数组。

ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

ColumnListHandler:将结果集中某一列的数据存放到List中。

KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key

MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List


package com.dsp.dbutil;


import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;


import com.dsp.util.DBCPUtil;


public class ResultSetHandlerDemo {
private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());


/**
* ArrayHandler:适合结果只有一条的情况。把记录中的每个字段的值封装到了一个Object[]中。

* @throws SQLException
*/
@Test
public void test1() throws SQLException {
Object[] objs = qr.query("select * from person", new ArrayHandler());
for (int i = 0; i < objs.length; i++) {
System.out.println(objs[i]);
}
}


/**
* ArrayListHandler:多条结果。把每条记录的列值封装到Object[],再把Object[]封装到List中
* ------------------- 1 aa0 2015-08-11 ------------------- 2 aa1 2015-08-11
* -------------------

* @throws SQLException
*/
@Test
public void test2() throws SQLException {
List<Object[]> list = qr.query("select * from person",
new ArrayListHandler());
for (Object[] objs : list) {
System.out.println("-------------------");
for (Object object : objs) {
System.out.println(object);
}
}
}


// ColumnListHandler:封装某列的值。把取出的列值封装到List中。 默认是第一列的加入到一个list ,也可以加入列名
@Test
public void test3() throws SQLException {
List<Object> list = qr.query("select * from person",
new ColumnListHandler("birthday"));
for (Object objs : list) {
System.out.println("-------------------");
System.out.println(objs);
}
}


// KeyedHandler:适合有多条记录的情况
@Test
public void test4() throws SQLException {
Map<Object, Map<String, Object>> bmap = qr.query(
"select * from person", new KeyedHandler("id"));
for (Map.Entry<Object, Map<String, Object>> bme : bmap.entrySet()) {
System.out.println("------------");
for (Entry<String, Object> lme : bme.getValue().entrySet()) {
System.out.println(lme.getKey() + ":" + lme.getValue());
}
}
}


// MapListHandler:把每行的key value 列加入到list
@Test
public void test5() throws SQLException {
List<Map<String, Object>> list=qr.query("select * from person", new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println("----------");
for (Map.Entry<String, Object> me : map.entrySet()) {
System.out.println(me.getKey()+":"+me.getValue());
}
}
}
//查询第一个值
@Test
public void test7() throws SQLException{
Object obj = qr.query("select count(*) from person", new ScalarHandler(1));
System.out.println(obj.getClass().getName());
System.out.println(obj);
}





}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值