一、介绍

为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响性能的情况下极大地简化JDBC的编码工作量。

DBUtils工具的核心是org.apache.commons.dbutils.QueryRunner类和org.apache.commons.dbutils.ResultSetHandler接口。

二、QueryRunner类

QueryRunner类简化了执行SQL语句的代码,它与ResultSetHandler组合在一起就能完成大部分的数据库操作,大大的减少了编码量。

QueryRunner类提供了带有一个参数的构造方法,该方法以javax.sql.DataSource作为参数传递到QueryRunner的构造方法中来获取Connection对象。

三、ResultSetHandler接口

ResultSetHandler接口用于处理ResultSet结果集,它可以将结果集中的数据转为不同的形式。根据结果集中数据类型的不同,ResultSetHandler提供了几种常见的实现类,具体如下: BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

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

ScalarHandler:将结果集中某一条记录的其中某一列的数据存储成Object对象。

如果上述实现类没有提供想要的功能,可以自定义一个类,实现ResultSetHandler接口的handle()方法。

四、ResultSetHandler实现类

4.1.在数据库jdbc中创建user表

use jdbc;create table `user` (`id` int (11) primary key auto_increment,`name` varchar (120),`password` varchar (120)
);
insert into `user` (`name`, `password`) values('zs','123456');
insert into `user` (`name`, `password`) values('lisi','123456');
insert into `user` (`name`, `password`) values('wangyu','123456');

4.2.导入commons-dbutils-1.6.jar并且需要上一章的JDBCUtils.java

4.3.创建BaseDao类

public class BaseDao {// 优化查询public static Object query(String sql, ResultSetHandler<?> rsh, Object... params) throws SQLException {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {// 获得连接conn = JDBCUtils.getConnection();// 预编译sqlpstmt = conn.prepareStatement(sql);// 将参数设置进去for (int i = 0; params != null && i < params.length; i++) {pstmt.setObject(i + 1, params[i]);}// 发送sqlrs = pstmt.executeQuery();// 让调用者去实现对结果集的处理Object obj = rsh.handle(rs);return obj;} catch (Exception e) {e.printStackTrace();}finally {// 释放资源JDBCUtils.release(rs, pstmt, conn);}return rs;}}

4.4.创建实体类User

public class User {private int id;private String name;private String password;
//补充getter setter

4.5.创建测试类ResultSetTest1

public class ResultSetTest1 {public static void testBeanHandler() throws SQLException {BaseDao basedao = new BaseDao();String sql = "select * from user where id=?";User user = (User) basedao.query(sql, new BeanHandler(User.class), 1);System.out.print("id为1的User对象的name值为:" + user.getName());}public static void main(String[] args) throws SQLException {testBeanHandler();}
}

4.6.ResultSetTest2

public class ResultSetTest2 {public static void testBeanListHandler() throws SQLException {BaseDao basedao = new BaseDao();String sql = "select * from user ";ArrayList<User> list = (ArrayList<User>) basedao.query(sql,new BeanListHandler(User.class));for (int i = 0; i < list.size(); i++) {System.out.println("第" + (i + 1) + "条数据的username值为:"+ list.get(i).getName());}}public static void main(String[] args) throws SQLException {testBeanListHandler();}
}

4.7.ResultSetTest3

public static void testScalarHandler() throws SQLException {BaseDao basedao = new BaseDao();String sql = "select * from user where id=?";Object arr = (Object) basedao.query(sql, new ScalarHandler("name"), 1);System.out.println(arr);}public static void main(String[] args) throws SQLException {testScalarHandler();}
}

【任务10-1】使用DBUtils实现增删改查

参考:

Dbutils工具

DBUtils工具的使用和详解

10-2-DBUtils工具相关推荐

  1. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...

  2. 免费学习编程的10个好工具

    互联网时代的快速发展,很多人都在学习编程技术,小编今天为大家推荐的就是学习编程技术会用到的一些编程工具,免费学习编程的10个好工具!希望能够帮助到正在学习的小伙伴们. 免费学习编程的10个好工具: 1 ...

  3. DbUtils工具类使用

    2019独角兽企业重金招聘Python工程师标准>>> DbUtils工具类使用 创建数据库 CREATE TABLE `student` (`userId` int(11) NOT ...

  4. 10.23cron10.24chkconfig工具10.25systemd管理服务10.26unit

    扩展: 1. anacron: http://blog.csdn.net/strikers1982/article/details/4787226 2. xinetd服(默认没安装这个服务,需要yum ...

  5. java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】

    Druid连接数据库,DBUtils工具类的使用 1.在maven中添加Druid依赖 com.alibaba druid 1.2.0 2.封装Druid连接方法 import com.alibaba ...

  6. 正在搜索开发人员模式安装包_每个 Java 开发人员都应该知道的 10 个基本工具...

    大家好,我们已经在 2019 年的第 9 个月,我相信你们所有人已经在 2019 年学到了什么,以及如何实现这些目标.我一直在写一系列文章,为你提供一些关于你可以学习和改进的想法,以便在 2019 年 ...

  7. 使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件

    使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件 适用场景:下载文件的完整性校验等. cmd调出命令行,输入如下命令 certutil -hashfile <文件名& ...

  8. 助你快速搭配 Material Design 配色方案的10款Web工具

    在设计 Material Design 的过程中你会发现一个很大的问题,那就是如何大胆.灵活的使用色彩组合. Material Design 里的调色板工具将色彩描述为"受大胆排列色块并结合 ...

  9. 远程办公软件合集 总结好用的10款远程办公工具

    有时我们需要在家远程控制公司电脑办公,但是我们怎么远程控制公司的电脑呢?Windows内置的远程桌面或者win10远程协助?虽然Windows提供的这两种功能都可以实现远程控制,但它们都有一定的限制条 ...

  10. 收藏!2022年开发运维必备的10款顶级工具

    工欲善其事必先利其器,作为互联网软件从业者,一款好用的工具往往能极大的方便我们解决问题. 下面我给大家盘点2022年开发运维必备的10款顶级工具,绝对能让你的工作效率事半功倍. 1.文件存储工具-CO ...

最新文章

  1. 函数指针及其定义和用法,C++函数指针详解(附用法代码和注意事项)
  2. Flask设置返回json格式数据
  3. Linux内存管理slub分配器
  4. JDK源码分析-收藏地址
  5. python+selenium自动化driver.switch_to.frame用法
  6. 转:VS2005的DataGridView 多维合并标题 功能拓展
  7. 初见mybatis-plus(快速创建入门案例)
  8. 内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程)
  9. hexo 环境变量_优雅的博客框架,快速、简洁、高效且主题丰富——Hexo
  10. 华为这份关于专利的会议纪要,都说了什么?(内含华为十大发明彩蛋)
  11. 如何去掉CAD教育版打印戳记
  12. liunx的du命令查看文件夹大小
  13. Ruiy classicsQuotations
  14. SGX软硬件栈(四)——桥函数
  15. 安装了linux后win10键盘失灵,win10系统安装后笔记本键盘失灵不能用的解决方法
  16. 春暖花开,微信公众号图文排版素材礼包已到!
  17. 7 进度指示器(LinearProgressIndicator、CircularProgressIndicator)
  18. Docker基础-使用Dockerfile创建镜像
  19. 为什么会有许多人认为C盘太满会影响电脑运行速度?
  20. Acne Scars Treatment - Probably the Best Acne Scars Treatment Available

热门文章

  1. tail,more查看日志(定点和翻页)
  2. 【flink】flink 报错 key group from 44 to 45 does not contain 4
  3. 【SpringClould】 eureka 的自我保护机制
  4. 【java】java AsyncHttpClient使用
  5. 【MySQL】OPTIMIZE TABLE 的碎片整理功能
  6. Spark Structured Kudu : RejectedExecutionException: Worker has already been shutdown
  7. treeReduce和reduce
  8. 95-230-020-源码-WordCount走读-获取StreamGraph的过程
  9. Netty : netty 4如何解决空轮询bug
  10. Spark-submit诡异问题之:ERROR XJ040: Failed to start database 'metastore_db'