JDBC--DBUtils的使用
1、commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
2、相关API:
--org.apache.commons.dbutils.QueryRunner
--org.apache.commons.dbutils.ResultSetHandle
--工具类:org.apache.commons.dbutils.DbUtils
3、使用QueryRunner进行更新操作:
--update方法:可执行delete,insert,update的sql语句
public void testQueryRunner_update(){
Connection conn = null;
//创建QueryRunner的实现类
QueryRunner queryRunner = new QueryRunner();
String sql = "DELETE FROM customers WHERE id > ?";
try{
//获取数据库连接
conn = JDBCUtils.getConnection();
//调用QueryRunner的update方法实现更新操作
int rows = queryRunner.update(conn, sql, 97);
System.out.println(rows + "rows deleted.");
}catch(Exception e){
e.printStackTrace();
}finally{
//释放数据库资源
JDBCUtils.release(conn, null, null);
}
}
4、使用QueryRunner进行查询操作:
--使用QuneryRunner的query()方法进行查询时,需要传入对应的ResultSetHandler的实现类对象以完成对结果集的处理,其返回类型取决于ResultSetHandler中handle方法的返回类型,可以使用以下几种ResultSetHandler:
--1)自定义结果集处理:
/**
*自定义ResultSetHandler,并重写handle方法,对结果集进行处理
*/
class MyResultSetHandler implements ResultSetHandler{
@Override
public Object handle(ResultSet rs) throws SQLException {
List<Customer> list = new ArrayList<>();
while(rs.next()){
BigDecimal id = rs.getBigDecimal(1);
String name = rs.getString(2);
Date birth = rs.getDate(3); Customer customer = new Customer(id, name, birth);
list.add(customer);
}
return list;
} } @Test
public void testResultSetHandler(){
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
try{
conn = JDBCUtils.getConnection();
String sql = "SELECT id \"id\", name \"name\", birth \"birth\" FROM customers where id < 5";
Object customers = queryRunner.query(conn, sql,
new MyResultSetHandler()); System.out.println(customers);
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(conn, null, null);
}
}
--源码分析queryRunner.query()方法
public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh,Object... params) throws SQLException {
PreparedStatement stmt = null;
ResultSet rs = null;
T result = null;
try {
stmt = this.prepareStatement(conn, sql);
this.fillStatement(stmt, params);
rs = this.wrap(stmt.executeQuery());
result = rsh.handle(rs);
} catch (SQLException e) {
this.rethrow(e, sql, params);
} finally {
try {
close(rs);
} finally {
close(stmt);
}
}
return result;
}
上面的方法中,在获取到结果集之后(第8行),将调用传入的ResultSetHandler对象的handle方法对结果集处理(第9行),这里将调用自定义的实现类中的handle方法。
--2)BeanHandler:将查询的结果集的第一条记录转化为传入的对应的class类的对象并返回:
Customer customer = queryRunner.query(conn, sql,new BeanHandler(Customer.class));
System.out.println(customer);
--3)BeanListHandler:将查询的结果集转化为传入的对应的class类的对象列表并返回:
List<Customer> customers = queryRunner.query(conn, sql,new BeanListHandler(Customer.class));
System.out.println(customers);
--4)MapHandler:将查询的结果集的第一条记录转化为Map并返回,其中key值对应列名,value对应列的值:
Map<String, Object> customer = queryRunner.query(conn, sql,new MapHandler());
System.out.println(customer);
--5)MapLsitHandler:将查询的结果集转化为MapList并返回,其中key值对应列名,value对应列的值:
List<Map<String, Object>> customers = queryRunner.query(conn, sql,new MapListHandler());
System.out.println(customers);
--6)ScalarHandler:将结果集的第一行第一列转化的数据成数值(可以是基础类型、String类和Date类):
String sql = "SELECT name FROM customers WHERE id = 5";
String name = (String)queryRunner.query(conn, sql,new ScalarHandler());
System.out.println(name);
JDBC--DBUtils的使用的更多相关文章
- 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)
-----------------------JDBC---------- 0. db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...
- 使用JDBC(Dbutils工具包)来从数据库拿取map类型数据来动态生成insert语句
前言: 大家在使用JDBC来连接数据库时,我们通过Dbutils工具来拿取数据库中的数据,可以使用new BeanListHandler<>(所映射的实体类.class),这样得到的数据, ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- jdbc操作mysql
本文讲述2点: 一. jdbc 操作 MySQL .(封装一个JdbcUtils.java类,实现数据库表的增删改查) 1. 建立数据库连接 Class.forName(DRIVER); connec ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- Android 之JDBC
JDBC(Java DataBase Connectivity)是使用 Java 存取数据库系统的标准解决方案,它将不同数据库间各自差异API与标准 SQL语句分开看待,实现数据库无关的 Java操作 ...
- 厚积薄发系列之JDBC详解
创建一个以JDBC链接数据库的程序,包含七个步骤 1.加载JDBC驱动 加载要连接的数据库的驱动到JVM 如何加载?forName(数据库驱动) MySQL:Class.forName("c ...
- JdbcUtils.java
package com.jdbc.dbutils; import java.lang.reflect.Field; import java.sql.Connection; import java.sq ...
- 32、mybatis
第一章回顾jdbc开发 1)优点:简单易学,上手快,非常灵活构建SQL,效率高 2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等) 开发者既要写业务逻辑,又要写对象的创建 ...
- mybaits入门
1.回顾jdbc开发 orm概述 orm是一种解决持久层对象关系映射的规则,而不是一种具体技术.jdbc/dbutils/springdao,hibernate/springorm,mybaits同属 ...
随机推荐
- Windows事件ID
51 Windows 无法找到网络路径.请确认网络路径正确并且目标计算机不忙或已关闭.如果 Windows 仍然无法找到网络路径,请与网络管理员联系. 52 由于网络上有重名,没有连接.请到“控制面板 ...
- oracle用户密码忘记怎么修改
安装完数据库很久不用常常会忘记其密码,碰到这种情况不要动不动就重装数据库,按其下方法修改即可. 一:忘记sys,system用户的密码 1,在开始菜单点击‘运行’,输入‘cmd’,打开命令提示窗口,输 ...
- Euler Sums系列(四)
\[\Large\displaystyle \sum_{n=1}^\infty (-1)^n \frac{H_n}{2n+1}=\mathbf{G}-\frac{\pi}{2}\ln(2)\] \(\ ...
- python查看包路径及对象的所有方法名
进入python环境: python 输入如下代码: import sys sys.path = sys.path[:] import django print(django.__path__) 得到 ...
- 802.1X与Cisco基于身份的网络服务(IBNS)
Cisco基于身份的网络服务(Identity-Based Networking Services,IBNS)是一种以IEEE802.1X标准为基础的安全架构,具有认证.用户策略.访问控制等多种功能, ...
- 201771010131-王之泰 实验一 软件工程准备—<通读《现代软件工程—构建之法》后所思所想>周学习总结
项目 内容 作业所属课程 https://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/12369881. ...
- vue 的模拟数据
首先分析需要什么数据,然后在build下 找到dev-server.js 在里面有一个var 项目名 = express() 在后面添加我们自己需要模拟的数据路由 // 自己添加路由 读取数据 sta ...
- 「JSOI2011」任务调度
「JSOI2011」任务调度 传送门 一开始还在想写平衡树,看到 \(\text{TRANS}\) 操作后就晓得要用可并堆了. 这题好像就是个可并堆的板子题??? ADD 直接往对应的对里面加元素 D ...
- C++关键字总结【新手必学】
const 关键字——常量const 与definedefine是预编译器的编译指令,它从C语言兼容下来,工作方式与文本编辑器中的全局搜索和替换相似.define定义的常量的意义在它开始的地方持续到文 ...
- Python 爬取 热词并进行分类数据分析-[热词分类+目录生成]
日期:2020.02.04 博客期:143 星期二 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[ ...