10-2-DBUtils工具
一、介绍
为了更加简单地使用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工具相关推荐
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...
- 免费学习编程的10个好工具
互联网时代的快速发展,很多人都在学习编程技术,小编今天为大家推荐的就是学习编程技术会用到的一些编程工具,免费学习编程的10个好工具!希望能够帮助到正在学习的小伙伴们. 免费学习编程的10个好工具: 1 ...
- DbUtils工具类使用
2019独角兽企业重金招聘Python工程师标准>>> DbUtils工具类使用 创建数据库 CREATE TABLE `student` (`userId` int(11) NOT ...
- 10.23cron10.24chkconfig工具10.25systemd管理服务10.26unit
扩展: 1. anacron: http://blog.csdn.net/strikers1982/article/details/4787226 2. xinetd服(默认没安装这个服务,需要yum ...
- java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】
Druid连接数据库,DBUtils工具类的使用 1.在maven中添加Druid依赖 com.alibaba druid 1.2.0 2.封装Druid连接方法 import com.alibaba ...
- 正在搜索开发人员模式安装包_每个 Java 开发人员都应该知道的 10 个基本工具...
大家好,我们已经在 2019 年的第 9 个月,我相信你们所有人已经在 2019 年学到了什么,以及如何实现这些目标.我一直在写一系列文章,为你提供一些关于你可以学习和改进的想法,以便在 2019 年 ...
- 使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件
使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件 适用场景:下载文件的完整性校验等. cmd调出命令行,输入如下命令 certutil -hashfile <文件名& ...
- 助你快速搭配 Material Design 配色方案的10款Web工具
在设计 Material Design 的过程中你会发现一个很大的问题,那就是如何大胆.灵活的使用色彩组合. Material Design 里的调色板工具将色彩描述为"受大胆排列色块并结合 ...
- 远程办公软件合集 总结好用的10款远程办公工具
有时我们需要在家远程控制公司电脑办公,但是我们怎么远程控制公司的电脑呢?Windows内置的远程桌面或者win10远程协助?虽然Windows提供的这两种功能都可以实现远程控制,但它们都有一定的限制条 ...
- 收藏!2022年开发运维必备的10款顶级工具
工欲善其事必先利其器,作为互联网软件从业者,一款好用的工具往往能极大的方便我们解决问题. 下面我给大家盘点2022年开发运维必备的10款顶级工具,绝对能让你的工作效率事半功倍. 1.文件存储工具-CO ...
最新文章
- 函数指针及其定义和用法,C++函数指针详解(附用法代码和注意事项)
- Flask设置返回json格式数据
- Linux内存管理slub分配器
- JDK源码分析-收藏地址
- python+selenium自动化driver.switch_to.frame用法
- 转:VS2005的DataGridView 多维合并标题 功能拓展
- 初见mybatis-plus(快速创建入门案例)
- 内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程)
- hexo 环境变量_优雅的博客框架,快速、简洁、高效且主题丰富——Hexo
- 华为这份关于专利的会议纪要,都说了什么?(内含华为十大发明彩蛋)
- 如何去掉CAD教育版打印戳记
- liunx的du命令查看文件夹大小
- Ruiy classicsQuotations
- SGX软硬件栈(四)——桥函数
- 安装了linux后win10键盘失灵,win10系统安装后笔记本键盘失灵不能用的解决方法
- 春暖花开,微信公众号图文排版素材礼包已到!
- 7 进度指示器(LinearProgressIndicator、CircularProgressIndicator)
- Docker基础-使用Dockerfile创建镜像
- 为什么会有许多人认为C盘太满会影响电脑运行速度?
- Acne Scars Treatment - Probably the Best Acne Scars Treatment Available
热门文章
- tail,more查看日志(定点和翻页)
- 【flink】flink 报错 key group from 44 to 45 does not contain 4
- 【SpringClould】 eureka 的自我保护机制
- 【java】java AsyncHttpClient使用
- 【MySQL】OPTIMIZE TABLE 的碎片整理功能
- Spark Structured Kudu : RejectedExecutionException: Worker has already been shutdown
- treeReduce和reduce
- 95-230-020-源码-WordCount走读-获取StreamGraph的过程
- Netty : netty 4如何解决空轮询bug
- Spark-submit诡异问题之:ERROR XJ040: Failed to start database 'metastore_db'