DBUtils:commons-dbutils是Apache组织提供的一个开源JDBC工具库,它是对JDBC的简单封装,并且使用dbutils会极大的简化jdbc编码的工作量,同时不会影响到程序的性能。

两个重要组成:

类:QueryRunner:SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。

接口:ResultSetHandle:封装数据的策略对象——将封装结果集中的数据,转换到另一个对象

方法之间的关系



实例代码:

public class DBUtils_12 {

    //1.创建QueryRunner的实现类
QueryRunner queryRunner = new QueryRunner(); /**
* 1.测试QueryRunner的实现类的update方法
* SQL语句可以是增、删、改
* 步骤: ①获取连接
* ②准备SQL语句
* ③QueryRunner对象调用update方法,同时把连接、SQL语句、占位符传进去
* ④关闭连接
*/
@Test
public void testUpdate(){
String sql = "delete from customers where id in(?,?)";
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
//2.使用update方法
queryRunner.update(conn, sql, 19,20);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
}
/**
* 2.测试是QueryRunner的Query方法
* SQL语句是查询
* 重点:QueryRunner的query方法的返回值取决于其ResultSetHandler参数的handle方法的返回值
* 步骤: ①获取连接
* ②准备SQL语句
* ③QueryRunner对象调用query方法,同时传入连接、SQL语句、和
*/
@Test
public void testQuery(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select id, name, age, birth, address from customers";
Object obj = queryRunner.query(conn, sql, new MyResultSetHandler()); System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
} }
//内部类
class MyResultSetHandler implements ResultSetHandler{
@Override
public Object handle(ResultSet resultSet) throws SQLException{
/* System.out.println("handle...");
return "test";*/
List<Customers> customers = new ArrayList<>(); while(resultSet.next()){
Integer id = resultSet.getInt(1);
String name = resultSet.getString(2);
String age = resultSet.getString(3);
Date birth = resultSet.getDate(4);
String address = resultSet.getString(5); Customers customer = new Customers(id, name, age, birth, address); customers.add(customer);
}
return customers;
}
} /**
* 一些比较重要的Handler方法
* BeanHandler()
* BeanListHandler()
* MapHandler()
* MapListHandler()
* ScalarHandler()
*
*/ //BeanHandler:把结果集的第一条记录转为创建BeanHandler对象时传入的Class参数对应的对象。
@Test
public void testBeanHandler(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select id, name, age, birth,address from customers where id = ?";
Customers customer = queryRunner.query(conn, sql, new BeanHandler(Customers.class), 17);
System.out.println(customer);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
} //BeanListHandler:把结果集转化为一个List,让list不为null,但有可能为空集合(size(),返回0)
//若SQL语句能够查询到记录,List中存放创建BeanListHandler时传入的Class对象对应的对象
@Test
public void testBeanListHandler(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select id, name, age, birth,address from customers";
List<Customers> customers = queryRunner.query(conn, sql, new BeanListHandler(Customers.class));
System.out.println(customers);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
} //MapHandler:返回SQL语句对应的第一条记录对应的Map对象,键:SQL查询的列名(非别名) 值:列的值
@Test
public void testMapHandler(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select id, name, age, birth,address from customers";
Map<String, Object> result = queryRunner.query(conn, sql, new MapHandler());
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
} //MapListHandler:将结果集转为Map的List,Map对应查询的一条记录,MapListHandler返回多条记录对应的Map的集合
@Test
public void testMapListHandler(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select id, name, age, birth,address from customers";
List<Map<String, Object>> results = queryRunner.query(conn, sql, new MapListHandler());
System.out.println(results);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
} //ScalarHandler:把结果集转为一个数值返回,这个数值可以是任意数据类型的和字符串,Data等。
@Test
public void testScalarHandler(){
Connection conn = null;
try {
conn = TestTools.getConnectionWithC3P0();
String sql = "select count(id) from customers";
Object results = queryRunner.query(conn, sql, new ScalarHandler());
System.out.println(results);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(null, conn);
}
} }

JDBC(12)—DBUtils工具类的更多相关文章

  1. DbUtils是Apache出品一款简化JDBC开发的工具类

    DbUtils     - DbUtils是Apache出品一款简化JDBC开发的工具类     - 使用DbUtils可以让我们JDBC的开发更加简单     - DbUtils的使用:       ...

  2. 30_java之DButils工具类

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

  3. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  4. Java学习笔记49(DBUtils工具类二)

    上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...

  5. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  6. DBUtils工具类的使用

    DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...

  7. DBUtils工具类和DBCP连接池

    今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...

  8. JDBC封装的工具类

    1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...

  9. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  10. dbutils工具类使用

    1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...

随机推荐

  1. Windows 7下java SDK下载、安装及环境变量设置

    第一步:下载Java JDK   1 登录官网站下载正版JDK   2 点击"SDK Download"进入Java JDK下载页面 注明: Java JDK和Java JRE区别 ...

  2. bzoj3992

    题解: 求模素数 p 原根的方法:对 p-1 进行素因子分解,记pi为p-1的第i个因子,若恒有a^((p-1)/pi) mod p ≠ 1  成立,则 a 就是 p 的原根.(对于合数求原根,只需把 ...

  3. [转]Java Web笔记:搭建环境和项目配置(MyEclipse 2014 + Maven + Tomcat)

    来源:http://www.jianshu.com/p/56caa738506a 0. 绪言 Java Web开发中,除了基础知识外,开发环境搭建,也是一项基本功.开发环境包括了IDE.项目管理.项目 ...

  4. Windows系统下MySQL添加到系统服务方法(mysql解压版)

    MySQL软件版本:64位 5.7.12 1.首先配置MySQL的环境变量,在系统环境变量Path的开头添加MySQL的bin目录的路径,以“;”结束,我的路径配置如下: 2.修改MySQL根目录下的 ...

  5. 【转】如何向Android模拟器打电话发短信

    转载地址:http://hi.baidu.com/jeremylai/item/420f9c9fe4881fccb62531f7 1. 启动Android Emulator, 查看标题栏找出端口.一般 ...

  6. spring mvc读取properties资源文件夹中文乱码问题

    通过在applicationContext.xml和springmvc.xml中配置 <bean        class="org.springframework.beans.fac ...

  7. 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)

    问题 C: Frosh Week 时间限制: 4 Sec  内存限制: 128 MB提交: 145  解决: 63[提交][状态][讨论版][命题人:admin] 题目描述 Professor Zac ...

  8. appium-电脑连不上手机设备如何解决

    在自动化过程中,会遇到电脑无法连接到手机情况,首先在cmd命令输入adb devices查看是否报错,报错绝大可能是5037端口被占用了,因为adb默认绑定的是5037端口 1.查看占用端口的进程PI ...

  9. numpy学习笔记.

    import numpy as np import cv2 import matplotlib.pyplot as plt 一.数组的创建 1. 创建二维数组 np.array([ [1,2,3], ...

  10. Spring监听,ApplicationListener

    import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import ...