昨天做了这么多的铺垫,当然就是为了引出今天的DBUtils框架了,它的实现原理跟我们编写的简易框架是类似的。

话不多说,进入正题。

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

jar包下载地址:链接:https://pan.baidu.com/s/1BKtq_VoBw52qyIJr6c_CZg

提取码:skrf

复制这段内容后打开百度网盘手机App,操作更方便哦

API介绍:

  • org.apache.commons.dbutils.QueryRunner --- 核心操作类
  • org.apache.commons.dbutils.ResultSetHandler
  • org.apache.commons.dbutils.DbUtils --- 工具类

QueryRunner 类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

QueryRunner类提供了两个构造方法:

默认的构造方法

需要一个 javax.sql.DataSource 来作参数的构造方法。

QueryRunner类有四个重载的构造方法,如果使用QueryRunner(DataSource ds)构造QueryRunner对象,数据库事务将交给DBUtils框架进行管理,默认情况下每一个sql单独一个事务。此时应该使用不带Connection参数的方法。

如果使用QueryRunner()构造QueryRunner对象,就需要自己来管理事务,因为框架没有连接池,无法获得数据库的连接,此时应该使用带Connection参数的方法。

Dbutils工具类能够加载驱动、关闭资源、控制事务,所以之前的一些繁琐工作都可以借助该工具类实现。

编写案例演示一下。

新建一个web项目,不要忘了导入jar包。

新建测试类QueryRunnerTest

先在类中定义一个成员变量,方便后续测试

	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

编写插入的测试代码

@Test
public void testInsert() throws SQLException{
//1、创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner(dataSource);
//2、准备方法参数
String sql ="insert into account values(null,?,?)";
Object[] param = {"fff",1000};
//3、调用方法
queryRunner.update(sql, param);
}

使用该构造方法构造的QueryRunner对象是不需要手动释放资源的,因为连接交由DBUtils工具包管理了,它会帮助我们释放资源。

然后运行测试代码



插入成功。

接下来测试一下更新sql,编写测试代码

    @Test
public void testUpdate() throws SQLException{
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "update account set money = ? where name = ?";
Object[] param = {2000,"fff"};
queryRunner.update(sql,param);
}

运行测试代码



修改成功。

接下来测试一下删除sql,编写测试代码

@Test
public void testDelete() throws SQLException{
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "delete from account where id = ?";
queryRunner.update(sql,2);
}

运行测试代码



删除成功。

现在我们来模拟一个转账的情景。

@Test
public void testTransfer() throws SQLException{
double money = 100;
String outAccount = "aaa";
String inAccount = "bbb";
String sql1 = "update account set money = money - ? where name = ?";
String sql2 = "update account set money = money + ? where name = ?"; QueryRunner queryRunner = new QueryRunner(dataSource);
queryRunner.update(sql1,money,outAccount);
//产生一个错误
int d = 1 / 0;
queryRunner.update(sql2,money,inAccount);
}

运行测试代码



程序报错,aaa账户少了100,而bbb账户金额并没有多,这是因为你把连接交给了DBUtils管理,默认一条sql就是一个事务,所以,我们应该自己来管理事务,才能避免这种情况发生。

修改转账代码

	@Test
public void testTransfer() throws SQLException{
double money = 100;
String outAccount = "aaa";
String inAccount = "bbb";
String sql1 = "update account set money = money - ? where name = ?";
String sql2 = "update account set money = money + ? where name = ?"; //手动事务管理
QueryRunner queryRunner = new QueryRunner();
Connection conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);
try {
queryRunner.update(conn,sql1,money,outAccount);
//产生一个错误
int d = 1 / 0;
queryRunner.update(conn,sql2,money,inAccount); DbUtils.commitAndCloseQuietly(conn);
} catch (Exception e) {
DbUtils.rollbackAndCloseQuietly(conn);
e.printStackTrace();
}
}

此时运行代码



表数据并没有改变,说明更新操作被回滚了。

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. DBUtils框架ResultSetHandler接口学习

    今儿在学习spring框架的时候,让我想起来之前做项目时一直搁置的一个问题,就是DBUtils框架的做数据库操作的使用,当时制作项目的时候就是通过实例打了一遍,由于时间原因也并没有仔细去了解这一方面. ...

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

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

  9. Apache—DBUtils框架简介

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

随机推荐

  1. 商业分析BA:用户故事怎么拆?

    什么是User Story其实我觉得要对User Story做一个定义还是挺难的.曾经的我以为,所谓User Story是User来讲述的Story.你看啊,User Story的编写范式:As a ...

  2. SMTP email from C#

    /// <summary> /// 一人一附件发送邮件 /// 2017-05-17 涂聚文 GeovinDu /// </summary> /// <param nam ...

  3. .Net Core组件化视图(部分视图)

    .Net Core组件化视图(部分视图) 1.背景 1.以前我们使用.Net的时候使用部分视图的方式在,.Net Core 中能在单独处理逻辑的部分视图没有了,但是我们还是想使用现在的.Net Cor ...

  4. MongoDB(四):数据类型、插入文档、查询文档

    1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...

  5. JVM常用参数详解

     JVM整个堆大小=年轻代大小 + 年老代大小 + 持久代大小,在JDK1.8及之后的版本由于永久代被元空间替代,所以jdk1.8中的堆=年轻代大小 + 年老代大小.本文使用的是JDK1.8  1.堆 ...

  6. Java_JDBC 连接

    今天,接着上一篇( mysql 数据库 )的基础上,我就写一下 Java 怎样连接数据库,并且操作数据库. 首先,我们先来准备一下数据库连接的驱动: mysql 的 jar 包下载地址:https:/ ...

  7. #r语言(二)笔记

    #r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...

  8. screen工具的安装与使用

    yum install screen    安装screen screen -S <作业名称>     创建新的页 screen -ls   查询已经存在的页面 screen -r < ...

  9. acwing 853. 有边数限制的最短路 模板

    地址 https://www.acwing.com/problem/content/description/855/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...

  10. Java之Map接口(双列集合)

    Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...