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. javascript 和 下拉列表

    <form id="f"> <select size="1" name="s"> <option value= ...

  2. 12px以下字体显示问题

    刚接到广告公司出的设计稿,里面很多内容均是12px以下得字体,现在来总结一下解决办法,方便以后使用 1.使用png图片 但是会影响页面响应速度 2.使用transform: scale(0.x); 注 ...

  3. Python hasattr,getattr,setattr,delattr

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # 反 ...

  4. 关于window.open窗口的resize事件

    jQuery 事件 - resize() 方法 当调整浏览器窗口的大小时,发生 resize 事件. resize() 方法触发 resize 事件,或规定当发生 resize 事件时运行的函数. & ...

  5. sql 跨服务器查询

    创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin ...

  6. P1433 吃奶酪 回溯法 优化

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  7. 020000——00001_使用 PyCharm

    1.快速上手的中文视频 简单介绍了如何安装.如何创建文件.如何设置皮肤. http://v.youku.com/v_show/id_XODMyMzM1NzQ4.html 2.Pychram 官方的快速 ...

  8. LRU缓存,大神写的,值得借鉴

    http://blog.csdn.net/beiyeqingteng/article/details/7010411

  9. python 操作mongo

    1. 导包: import pymongo 2. 建立连接 client = pymongo.MongoClient("127.0.0.1",27017) 3. 获取数据库 db ...

  10. Socket/ServerSocket 选项

    在网络编程中,Socket/ServerSocket有一些选项用来自定义一些行为,现在分享一下.     Socket选项 1.TCP_NODELAY 在Socket发送数据时,默认情况下,数据会先进 ...