JDBC(12)—DBUtils工具类
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工具类的更多相关文章
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- DBUtils工具类的使用
DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...
- DBUtils工具类和DBCP连接池
今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- dbutils工具类使用
1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...
随机推荐
- 常用js正则表达式大全
常用js正则表达式大全.一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和 ...
- .Net开源网络爬虫Abot介绍(转)
转载地址:http://www.cnblogs.com/JustRun1983/p/abot-crawler.html .Net中也有很多很多开源的爬虫工具,abot就是其中之一.Abot是一个开源的 ...
- noi.ac 第五场第六场
t1应该比较水所以我都没看 感觉从思路上来说都不难(比牛客网这可简单多了吧) 第五场 t2: 比较套路的dp f[i]表示考虑前i个数,第i个满足f[i]=i的最大个数 i能从j转移需要满足 j< ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡
题解: 网上有一种复杂的方法..好像复杂度并没有优势就没看 定义f[i]表示i的期望经过次数,f[i]=sigma{f[j]*p/q/du[j]}+(i==1); 然后高斯消元就可以了 最后求出来的f ...
- 学习之"setjmp和longjmp函数"
Linux学习之"setjmp和longjmp函数" 转贴,原文地址:http://www.cnblogs.com/lq0729/archive/2011/10/23/2222 ...
- Codeforces 1101F Trucks and Cities dp (看题解)
Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导... 感觉有这个误导之后很难往dp那个方向靠.. dp[ ...
- python--异常捕获
#异常捕获---指定异常类型 try: #尝试 fi=open(r'D:\Users\4399-3046\Desktop\test.txt',mode='wb'); fi.write('写入文字'); ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- webstorm 2017 激活破解方法大全
webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/4/8)v3.3 注册时,在打开的License ...
- 关闭selinux服务
vim /etc/selinux/config 将SELINUX=disabled 执行setenforce 0