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三个核心功 ...
随机推荐
- IIS异常
http 错误 500.19 - internal server error 今天发布wcf到本地的IIS上,访问时出现了500.19错误.有效解决办法:是因为IIS没有安装完全,把能勾选的全部勾选上 ...
- adb devices unauthorized解决办法
进行Android项目调试时,连接完设备,进行adb install ******.apk时,偶遇 adb devices unauthorized 这个小东西,解决办法:将手机设置->辅助功能 ...
- noip飞扬的小鸟
题解: 挺简单的题目 f[i][j]表示x坐标为i,y坐标为j的最小值 会发现那个东西是个完全背包 从f[i][j-a[i]]转移一下就是O(1)转移的了 另外上界为m这个要特判一下 我把sum[a[ ...
- twitter typeahead控件使用经历
typeahead控件可以用于自动完成这个功能,在jQuery的UI中也有自动完成的控件.以前都是用jQuery UI中的自动完成的控件,但这次想用个轻量级的自动完成的控件,因此就调查了一下typeh ...
- 【Android】application标签说明
<application> <application android:allowClearUserData=["true" | "false" ...
- 【转】如何向Android模拟器打电话发短信
转载地址:http://hi.baidu.com/jeremylai/item/420f9c9fe4881fccb62531f7 1. 启动Android Emulator, 查看标题栏找出端口.一般 ...
- Codeforces 442D Adam and Tree dp (看题解)
Adam and Tree 感觉非常巧妙的一题.. 如果对于一个已经建立完成的树, 那么我们可以用dp[ i ]表示染完 i 这棵子树, 并给从fa[ i ] -> i的条边也染色的最少颜色数. ...
- sublime text 自定义插件,自动插入署名,自定义插入日期,自动生成头部注释
自动插入署名 菜单下面的 一.工具(tool)>新代码段(new snippet…) 看到以下代码 <snippet> <content><![CDATA[ Hel ...
- easyui 信息提示
/*消息提示begin*/jQuery.Info = function (msg) { $.messager.alert("温馨提示", msg, "info" ...
- Java基础总结01:JDK与JRE概述
1)JRE(Java Runtime Environment,Java运行时环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一 ...