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实例,这里用到了对象关系映射

  @Testpublic 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集合里

   @Testpublic 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集合,也就是只能获取表里第一行满足条件的数据。后者能获取所有满足条件的数据。

 @Testpublic 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());}}@Testpublic 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();}}
}

JDBC学习之QueryRunner类及query方法的使用相关推荐

  1. 《Java 核心技术卷1 第10版》学习笔记------ Object类的 hashCode 方法

    散列码( hash code ) 是由对象导出的一个整型值.散列码是没有规律的.如果 x 和 y 是两个不同的对象, x.hashCode( ) 与 y.hashCode( ) 基本上不会相同. 在表 ...

  2. 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法

    Object 简述 Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的. 在 Java 中, 只有基本类型 ( primitive types) 不是对象, 例如 ...

  3. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  4. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪

    本文目录: 1.自定义JDBC框架 --数据库元数据:DataBaseMetaData 2.自定义JDBC框架 --数据库元数据:DataBaseMetaData 3.自定义JDBC框架 --结果集元 ...

  5. 《JavaWeb从入门到改行》JDBC经典秘方QueryRunner

    目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...

  6. tp5原生SQL:读操作(query方法)

    原生SQL:读操作(query方法) 一.TP5原生读操作是通过Query类的query()方法来实现 2.Db类直接静态调用方法 我们知道,TP5把数据类拆分为Connection(连接器)/Bui ...

  7. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  8. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  9. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

    JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...

最新文章

  1. 别找了,Thonny 才是 Python 小白的最理想的 IDE
  2. c语言中跨文件变量,C语言中跨文件的全局变量
  3. xmm1是什么器件_数字电路实验指导书
  4. vba里面的日期数据转换异常(Format error)(使用IsDate方法部分解决)
  5. jboss4 java_JBoss核心Java Web服务
  6. 【Gym - 101061F】Fairness(dp,思维)
  7. linux 端口打不开,在线等!!为什么telnet的23端口就是打不开啊
  8. 开始使用Python编程
  9. 工作变得简单又高效 试试这八个WebApp
  10. 消息中间件学习总结(12)——Kafka与RocketMQ的多Topic对性能稳定性的影响比较分析
  11. java map转xml 工具类_xml和map互转工具类
  12. 熵的理解(玻尔兹曼分布)
  13. MySQL filesort优化案例一则
  14. C# 使用Log4Net记录程序日志
  15. HI3518E 中Sample Venc分析
  16. 华为服务器串号官网查询系统,查询服务器序列号
  17. vue项目如何集成良田高拍仪(二次开发)
  18. 用极限定义证明微积分基本定理
  19. 服务器svn自动同步,svn主备服务器实时同步
  20. Java大学生特训营 疫情地图项目实战课

热门文章

  1. 非主流自然语言处理——遗忘算法系列(一):算法概述
  2. 《猫和老鼠》里的魔术艺术(二)——循环的艺术逻辑
  3. 细节决定成败,浅析《合金弹头》的成功之道
  4. SQLMAP工具 详细使用方法
  5. Ubuntu加域后域账号登录账号串号
  6. AG表格基础滚动分页-React版本
  7. git merge合并分支解决冲突
  8. 文字转换为语音VB.NEt实现
  9. 什么是DOSS攻击?(网络攻击详解)
  10. 浏览器代理服务器灰显不能修改,win10系统浏览器主页设置变成灰色无法修改的解决方法...