1. 概述
DBUtils 是java中数据库操作的使用工具 DBUtils封装了JDBC操作 简化了JDBC操作 可以少些代码
2.三个核心功能
QueryRunner 中提供了sql语句操作的API
ResultSetHandler 接口 用于select 操作后 怎样封装结果集
Dbutils 工具类 关闭资源 事物的处理方法
准备数据 product表
QueryRunner—》 newQueryRunner(DataSource);
update(String sql, Object …prams) DML增删改
query(String sql,ResultSetHandler,Object …prams));
package cn.demo02dbuntil;
import C3P0Untils1.C3P0xmlUtils;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import javax.jws.soap.SOAPBinding;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/*
apache公司的commons组件 ---》jdbc6部---》3步(jdbc)
* QueryRunner 中提供了sql语句操作的API 增删 改查
* update query
ResultSetHandler 接口 用于select 操作后 接受查询的结果集
Dbutils 工具类 关闭资源 事物的处理方法 释放资源
使用步骤
1 创建QueryRuner 对象
QueryRunner 中提供了sql语句操作的API
2 调用QueryRuner 对象的方法 update query
3 处理结果
*/
public class Dem01Dbuntils {
// 使用Dbutils工具包对数据库进行添加数据
@Test
public void testInsert() throws SQLException {
// 1 创建QueryRuner 对象
QueryRunner qr = new QueryRunner();
// 2 调用QueryRuner 对象的方法 update query
Connection conn = C3P0xmlUtils.getCollection();
String sql="insert into users values (?,?,?)";
int row = qr.update(conn, sql, null, "王六", "1111");
// 3 处理结果
System.out.println(row+"行数据发生改变");
DbUtils.close(conn);
}
// 使用Dbutils工具包对数据库进行修改
@Test
public void testUpdate() throws SQLException {
// 1 创建QueryRunner 对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDatesource());
// 2 调用QueryRuner 对象的方法 update query
int i = qr.update("UPDATE users SET pname=?,pasword=? WHERE cid=?;", "刘德华", "11111",5);
//3. 处理结果
System.out.println(i+"行数据发生改变");
}
// 使用Dbutils工具包对数据库删除一条数据
@Test
public void testDelete() throws SQLException {
//1.创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDatesource());
//2 调用QueryRunner 对象 update query
int i = qr.update("delete from users where cid in(?,?)", 4,5);
//3 处理结果
System.out.println(i+"行数据删除成功");
}
// 使用Dbutils工具包对数据库进行查询 结果集为 BeanHandler
/*
使用方法:
把查询结果第一行数据取出来 存储到javabean对象中返回
构造方法
BeanHandler(Class<T> type) 传递javabean的class文件对象 Product.class
*/
@Test
public void testBeanHandler() throws SQLException {
//1.创建QueryRunner 对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDatesource());
//调用QueryRunner 对象的方法 update query
//另建一个类 类中定义数据库中相同列明的变量和数据类型 对所有定义的变量 重写 获取set get方法
List<Users> us = qr.query("select * from users", new BeanListHandler<>(Users.class));
//3. 处理结果
for (Users a:us){
System.out.println(a);
}
}
//控制台查询结果如下:
//Users{cid=1, pname='张三', pasword='1234'}
//Users{cid=2, pname='lisi', pasword='1234'}
//Users{cid=6, pname='爱', pasword='111'}
//Users{cid=7, pname='李22', pasword='l123'}
//Users{cid=8, pname='王六', pasword='1111'}
/*
使用Dbutils工具包对数据库的表进行查询 使用结果集ScanlarHandler 用于接受slq语句是单一返回的情况
使用方式:
1 聚合函数 sum avg count max min
2 获得某一行的某一字段的值
select pname from product where pid = ?
*/
@Test
public void testScanlarHnadler() throws SQLException {
//1..创建 QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDatesource());
// 2 调用QueryRuner 对象的方法 update query
Object o = qr.query("select count(*) from users", new ScalarHandler());
//3 处理结果
System.out.println(o);
}
// 使用Dbutils工具包对数据库的表进行查询 使用结果集ColumnListHandler
//用于查询指定的列 数据储存到List集合
@Test
public void testColumnListHandler() throws SQLException {
// 1 创建QueryRuner 对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDatesource());
// 2 调用QueryRuner 对象的方法 update query
List<Object> list = qr.query("select cid,pname from users", new ColumnListHandler("pname"));
//3 处理结果
for (Object ob:list){
System.out.println(ob);
}
}
}