JDBC学习之QueryRunner类及query方法的使用

QueryRunner类是DbUtils工具类里的核心类之一,提供了多种重载的query方法。
在API里对此类的介绍如下:Executes SQL queries with pluggable strategies for handling ResultSets(执行Sql语句,使用可插拔式策略操作结果集)。

QueryRunner(DataSource ds),其中的一个有参构造方法,不考虑事务问题时就可以用这个构造器直接获取数据库连接,
参数是一个数据库连接对象。

看一下QueryRunner类的源码,这是query的其中一个重载方法,ResultSetHandler接口就提现了可插拔策略,它有多个实现类,来对结果的获取形式进行一个操作。
在这里插入图片描述
下面分别介绍几个query重载方法,也就是获取不同的结果使用的几种ResultHandler实现类.

BeanHandler

BeanHandler(Class type),参数是一个Class实例,这里用到了对象关系映射

  @Test
    public void beanTest() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id employeeId,first_name firstName,last_name lastName,email,"+
"phone_number phoneNumber,job_id jobId,salary,manager_id managerId, department_id departmentId from my_employees where employee_id=?";
        Department de = qr.query(sql, new BeanHandler<>(MyEmployees.class),100);
        //MyEmployees是一个JavaBean,里面封装的变量代表my_employees表的列名
        System.out.println(de);
    }

结果图:
在这里插入图片描述

上面的sql语句如果不给每一个列名起一个与javaBean里的成员变量名相同的别名的话结果就会如下图所示,如果列名和变量名相同就不用起别名:
在这里插入图片描述

ArrayListHandler

将每行结果转换为一个Object数组,然后将多个Object数组放入到list集合里

   @Test
    public void oneData() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id employeeId,first_name firstName from my_employees where employee_id=?";
        List<Object[]> query = qr.query(sql, new ArrayListHandler(), 100);
     /*   for (Object[] objects : query) {//相当于二维数组,从list集合取出每个Object[]一维数组
            for (Object object : objects) {//遍历一维数组
                System.out.println(object);
            }
        }*/
     Object[] obj=query.get(0);
        for (Object o : obj) {
            System.out.print(o);
            System.out.print(" ");
        }
    }

MapHandler & MapListHandler

区别就是,前者只能获取一个map集合,也就是只能获取表里第一行满足条件的数据。后者能获取所有满足条件的数据。

 @Test
    public void mapHandlerTest() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id,first_name,salary from my_employees where manager_id=103";
        Map map=qr.query(sql,new MapHandler());//MapHandler将ResultSet结果集里的第一行转换成一个map集合
       //Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<Object,Object>> set = map.entrySet();
        for (Map.Entry<Object, Object> entry : set) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
    }

    @Test
    public void mapList() throws SQLException {
        int i=0;
        QueryRunner qr = new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id ,first_name, manager_id from my_employees where manager_id=103";
       //MapListHandler将结果集形成一系列的map集合放入list集合里
        List<Map<String,Object>> list=qr.query(sql,new MapListHandler());
        for (Map<String, Object> map : list) {
            System.out.println("第"+(i++)+"个结果");
            Set<Map.Entry<String,Object>> set = map.entrySet();
            for (Map.Entry<String, Object> entry : set) {
                System.out.println(entry.getKey()+" : "+entry.getValue());
            }
            System.out.println();
        }
    }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值