刚才讲了使用QueryRunner插入、修改、更新数据,现在来学习一下使用QueryRunner进行数据库表查询。

通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很显然,我们应该使用DBUtils工具包提供的实现类来实现封装。

在DBUtils框架中,共提供了九个ResultSetHandler的实现类。

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的key。
  • ScalarHandler:将结果集中的列的信息转换到一个对象中

分别通过案例感受一下。

新建测试类ResultSetHandlerTest

然后添加成员变量

  1. private ComboPooledDataSource dataSource = new ComboPooledDataSource();

添加ArrayHandler的测试代码

  1. @Test
  2. public void testArrayHandler() throws SQLException{
  3. //ArrayHandler 将结果集的第一行数据存入Object数组
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. //数组的每一个元素对应第一行数据的每一列
  7. Object[] objects = queryRunner.query(sql, new ArrayHandler());
  8. System.out.println(Arrays.toString(objects));
  9. }

运行代码



添加ArrayListHandler测试代码

  1. @Test
  2. public void testArrayListHandler() throws SQLException{
  3. //ArrayListHandler 将结果集的每一行数据存入Object数组,然后存入List
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());
  7. for(Object[] objects : list){
  8. System.out.println(Arrays.toString(objects));
  9. }
  10. }

运行代码



添加BeanHandler测试代码

  1. @Test
  2. public void testBeanHandler() throws SQLException{
  3. //BeanHandler 将结果集的第一行数据封装到JavaBean对象中
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. //传入Account.class参数是为了在方法中通过反射构造Account对象实例
  7. Account account = queryRunner.query(sql, new BeanHandler<Account>(Account.class));
  8. System.out.println(account.getId());
  9. System.out.println(account.getName());
  10. System.out.println(account.getMoney());
  11. }

运行代码



注意事项:使用BeanHandler,表列名必须与Bean类的属性名称一致。

添加BeanListHandler测试代码

  1. @Test
  2. public void testBeanListHandler() throws SQLException{
  3. //BeanListHandler 将结果集每一条数据都封装到JavaBean对象,再存入List
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. List<Account> list = queryRunner.query(sql, new BeanListHandler<Account>(Account.class));
  7. for(Account account : list){
  8. System.out.print(account.getId() + "\t");
  9. System.out.print(account.getName() + "\t");
  10. System.out.print(account.getMoney());
  11. System.out.println();
  12. }
  13. }

运行代码



添加ColumnListHandler测试代码

  1. @Test
  2. public void testColumnListHandler() throws SQLException{
  3. //ColumnListHandler 获得结果集的某一列
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. //泛型为什么写Object 因为每列的类型都不一样
  7. List<Object> list = queryRunner.query(sql, new ColumnListHandler("name"));
  8. System.out.println(list);
  9. }

运行代码



添加MapHandler测试代码

  1. @Test
  2. public void testMapHandler() throws SQLException{
  3. //MapHandler 将结果集中的第一行数据封装到Map集合,key是列名,value是数据值
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. Map<String, Object> map = queryRunner.query(sql, new MapHandler());
  7. System.out.println(map);
  8. }

运行代码



添加MapListHandler测试代码

  1. @Test
  2. public void testMapListHandler() throws SQLException {
  3. // MapHandler 将结果集中的每一行数据封装到Map集合,key是列名,value是数据值,再将Map对象存入List
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());
  7. for(Map<String,Object> map : list){
  8. System.out.println(map);
  9. }
  10. }

运行代码



添加KeyedHandler测试代码

  1. @Test
  2. public void testKeyedHandler() throws SQLException {
  3. // KeyedHandler 将结果集中的每一行数据都封装到Map里,再将Map存入一个Map里,key可以指定为任意列
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select * from account";
  6. Map<Object, Map<String,Object>> map = queryRunner.query(sql, new KeyedHandler("name"));
  7. System.out.println(map);
  8. }

运行代码



添加ScalarHandler测试代码

  1. @Test
  2. public void testScalarHandler() throws SQLException{
  3. //ScalarHandler 通常保存只有一行一列的结果数据
  4. QueryRunner queryRunner = new QueryRunner(dataSource);
  5. String sql = "select count(*) from account";
  6. long count = (Long) queryRunner.query(sql, new ScalarHandler(1));
  7. System.out.println(count);
  8. }

运行代码



到这里,九个Hanlder就介绍完毕了。

最常用的几个:

BeanHandler、BeanListHandler、ColumnListHandler、ScalarHandler。

DBUtils框架的使用(下)的更多相关文章

  1. Apache—DBUtils框架简介

    转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner ...

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

    本文目录:       1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData        2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData       ...

  3. JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作

    1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...

  4. javaweb学习总结(四十一)——Apache的DBUtils框架学习

    一.commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化 ...

  5. Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用

    前面做了一个非常垃圾的小demo,真的无法直面它,菜的抠脚啊,真的菜,好好努力把.菜鸡. --WH 一.JDBC是什么? Java Data Base Connectivity,java数据库连接,在 ...

  6. JDBC第四篇--【数据库连接池、DbUtils框架、分页】

    1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的. 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接池 ...

  7. JDBC【数据库连接池、DbUtils框架、分页】

    1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的... 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接 ...

  8. pache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口

    Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC ...

  9. Apache的DBUtils框架学习(转)

    原文地址:http://www.cnblogs.com/xdp-gacl/p/4007225.html 一.commons-dbutils简介 commons-dbutils 是 Apache 组织提 ...

随机推荐

  1. 后端 - Lession 01 PHP 基础

    目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...

  2. Android/AndroidStudio/idea使用教程之git使用(详细)(码云)

    已经安装好了AndroidStudio,安装教程 本教程是作者自己摸索出来的,有不足之处还请大家海涵.多多拍砖,互相学习. 第一步:下载git,安装git客户端 直接百度git,下载git ​ 安装g ...

  3. C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法

    连载目录    [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...

  4. 校园表白墙、微信表白墙、校园墙 微信小程序 JAVA 开发记录与分享

    目录 最新版表白墙博客地址 1.微信小程序前台展示 2.功能介绍 3.后台管理 4.后端语言采用 JAVA 开发 5.体验此微信小程序 扫描下方二维码 6.如何联系我或需要源码进行联系 最新版表白墙博 ...

  5. nginx CRLF(换行回车)注入漏洞复现

    nginx CRLF(换行回车)注入漏洞复现 一.漏洞描述 CRLF是”回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a.在HTTP协议中,HTTP header与HTTP Bo ...

  6. eclipse(javaee windows)

    百度云:链接:http://pan.baidu.com/s/1eSoO4s6   密码:54am 官方下载网址:http://www.eclipse.org/downloads/eclipse-pac ...

  7. 《C# 语言学习笔记》——C# 简介

    1 什么是.NET Framework .NET Framework 是Microsoft为开发应用程序而创建的一个富有革命性的新平台. 1.1 .NET Framework 的内容 .NET Fra ...

  8. IIS应用程序池标识(程序池账户)ApplicationPoolIdentify

    IIS中应用程序池的运行账户(标识)有以下4个选项 LocalService 本地服务 LocalSystem 本地系统 NetWorkService 网络服务 ApplicationPoolIden ...

  9. JSP使用分层实现业务处理

    在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection co ...

  10. 【Java】You have an error in your SQL syntax ...

    详情如下: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server v ...