MySQL数据库 DBUtils工具包
使用JDBC技术是一件繁琐的事情,为了使数据库更加高效,有一种简化jdbc技术的操作--DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。
//QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。
使用步骤
1 创建QueryRuner 对象
2 调用QueryRuner 对象的方法 增删改update 查query
3 处理结果
//ResultSetHandler接口(org.apache.commons.dbutils.ResultSethandler)执行处理一个结果集对象(用于select操作后),将数据转变并处理为任何一种形式,供其他应用使用。实现类如下:
- BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
- BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。//重点
- ColumnListHandler:将结果集中某一列的数据存放到List中。
- ScalarHandler:将结果集第一行的某一列放到某个对象中。//重点
package cn.kgc.dbutils;
import C3P0xmlUtils.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 java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* apache公司的commons组件
* QueryRunner类中提供了SQL语句操作的api 增删改 查
* ResultSetHandler接口 用于select操作后 接收查询的结果
* DBUtils工具类 关闭资源 事务的处理方法 释放资源
* QueryRunner类使用步骤
* 1.创建QueryRunner对象
* 2.调用QueryRunner对象的方法 增删改update 查query
* 3.处理结果
*/
public class Demo01Dbutils {
//使用DBUtils工具包对数据库进行添加数据
@Test
public void testInsert() throws SQLException {
//创建 QueryRunner对象
QueryRunner qr = new QueryRunner();
//通过C3P0xmlUtils工具类获得连接对象 Connection
Connection conn = C3P0xmlUtils.getConnection();
String sql="insert into product(pid,pname,price,category_id,flag)values(?,?,?,?,?)";
//调用QueryRunner对象的方法 update
int row = qr.update(conn, sql, 17, "奥利奥", 6.9, "c003", "否");
//处理结果
System.out.println(row+"行发生改变");
DbUtils.closeQuietly(conn);
}
//使用DBUtils工具包对数据库进行修改数据
@Test
public void testUpdate() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的update方法
int row = qr.update("update product set pname =?,price=? where pid=?", "巧克力", 9.9, 17);
//处理结果
System.out.println(row);
}
//使用DBUtils工具包对数据库 删除一条记录
@Test
public void testDelete() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的update方法
int row = qr.update("delete from prouct where pid in(?,?)", 16, 17);
//处理结果
System.out.println(row);
}
/**
* 使用DBUtils工具包对数据库的表进行查询 使用结果集BeanHandler
* 使用方式:把查询结果第一行数据取出来 存储到javabean对象中返回
* 构造方法
* BeanHandler(class<T> type)传递javabean的class文件对象 Product.class
*/
@Test
public void testBeanHandler() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的方法 query
Product p = qr.query("select * from product", new BeanHandler<>(Product.class));
//处理结果
System.out.println(p);
}
/**
* 使用DBUtils工具包对数据库的表进行查询 使用结果集 BeanListHandler
* 使用方式:把查询的多行结果存储到多个javabean中--→List集合
*/
@Test
public void testBeanListHandler() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的方法 query
List<Product> list = qr.query("select * from product", new BeanListHandler<>(Product.class));
//处理结果
for (Product l:list){
System.out.println(l);
}
}
/**
* 使用DBUtils工具包对数据库的表进行查询 使用结果集ScalarHandler
* 使用方式:用于接收SQL语句是单一返回的情况
* 1.聚合函数 sum avg max min count
* 2.获得某一行的某一字段的值
*/
@Test
public void testScalarHandler() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的方法 query
// Object o = qr.query("select count(*) from product", new ScalarHandler());
Object o = qr.query("select pname from product where pid=?", new ScalarHandler(), 8);
//处理结果
System.out.println(o);
}
/**
* 使用DBUtils工具包对数据库的表进行查询 使用结果集ColumnListHandler
* 用于查询指定的列 数据存储到List集合
*/
@Test
public void testColumnListHandler() throws SQLException {
//创建QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0xmlUtils.getDataSource());
//调用QueryRunner对象的方法 query
List<Object> list = qr.query("select pid,pname from product", new ColumnListHandler("pid"));
//处理结果
for (Object l:list){
System.out.println(l);
}
}
}