1 DBUtils概述
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
关于关闭连接:
在创建QueryRunner时传入dataSource对象每次在执行完之后都会自动关闭Connection连接对象所以再也不用担心没有关闭对象而导致的问题了
如果没有传入dataSource的话 需要手动关闭连接。
2 核心类说明
2.1 QueryRunner类
QueryRunner(DataSource ds
提供数据源(连接池),DBUtils底层自动维护连接connection
update(String sql):
执行无参数的插入、更新或删除(DML)操作。
update(String sql, Object params[]):
执行带参数的插入、更新或删除(DML)操作。
query(String sql, ResultSetHandler rsh):
执行无需参数的选择查询,结果放入rsh中。
query(String sql, Object params, ResultSetHandler rsh):
执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
2 ResultSetHandler类(结果集处理类)
ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
MapListHandler 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
ScalarHandler 它是用于单个数据。例如select count(*) from 表操作。
例子:
1:显示所有的dept:部门id,部门名称,
2:显示所有的emp:员工id,员工姓名,员工所在部门名称。
注意:使用DBUtils之前,需要导入5个包:
package cn.njit.DBUtils;
import java.io.Serializable;
public class Dept implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String deptno;
private String dname;
private String loc;
public String getDeptno() {
return deptno;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public String toString() {
return deptno+"-"+dname;
}
}
-------------------------------------------------------------------------------------------
package cn.njit.DBUtils;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import util.C3P0Utils;
public class DBUtilsDemo_2 {
public static void main(String[] args) {
testdeptQueryAll();
}
static void testdeptQueryAll() {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
System.out.println("--------BeanListHandler---------");
BeanListHandler<Dept> blhl = new BeanListHandler<Dept>(Dept.class);
String sql = "select * from dept";
try {
List<Dept> list = qr.query(sql, blhl);
System.out.println("部门id" + "\t" + "部门名称");
for (Dept d : list) {
System.out.println(d.getDeptno() + "\t" + d.getDname());
}
} catch (SQLException e) {
e.printStackTrace();
}
//----返回一个集合,ArrayListHandler
System.out.println("-------ArrayListHandler--------");
sql="select emp.*,dept.dname from emp,dept where emp.deptno=dept.deptno";
ArrayListHandler ahs=new ArrayListHandler();
try {
List<Object[]> list=qr.query(sql, ahs);
for(Object[] o:list) {
System.out.println(Arrays.toString(o));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}