API简介
Commons-dbutils的核心是两个类
org.apache.commons.dbutils.DBUtils
org.apache.commons.dbutils.QueryRunner
和一个接口
org.apache.commons.dbutils.ResultSetHandler
1.DBUtils类
主要为关闭连接,装载JDBC驱动程序之类的常规工作提供方法,都是静态的方法
1.close();
2.closeQuietly(Connection conn,Statement stmt,ResultSet rs);
不仅可以在对象为空的情况下关闭还可以隐藏一些在程序中抛出的SQL异常
3.commitAndCloseQuietly(Connection conn)
用来提交连接,关闭连接,在关闭连接时不抛出SQL异常
4.loadDriver(java.long.String driverClassName)
用于装载并注册JDBC驱动程序
2.QueryRunner类
简化了执行SQL语句的代码它与ResultSetHandler组合在一起减少编码量
提供了两个构造方法
1.query(Connection conn,String sql,ResultSetHandler rsh,Object[ ] params)
2.queryString sql,ResultSetHandler rsh,Object[ ] params)
3..query(Connection conn,String sql,ResultSetHandler rsh)
4.update(Connection conn,String sql,Object[ ] params)
5.update(Connection conn,String sql)
private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
@Test
public void testAdd() throws SQLException{
qr.update("insert into student values(?,?,?)", 1,"杨洋",new Date());
}
@Test
public void testUpdate() throws SQLException{
qr.update("update student set birthday=? where id=?", "1993-08-01",1);
}
@Test
public void testDel() throws SQLException{
qr.update("delete from student where id=?", 1);
}
//批处理插入10条
@Test
public void testBatch() throws SQLException{
Object params[][] = new Object[10][];//高维:记录的条数。低维:每条记录需要的参数
for(int i=0;i
params[i] = new Object[]{i+1,"杨洋"+(i+1),new Date()};
}
qr.batch("insert into student values(?,?,?)", params);
}
//大文本:了解
/*
create table t1(
id int primary key,
content longtext
);
/
@Test//大文本类型===Clob
public void testClob()throws Exception{
File file = new File("src/pqy&sx.txt");//文件很大,内存浪费
Reader reader = new FileReader(file);
char ch[] = new char[(int)file.length()];
reader.read(ch);
reader.close();
Clob clob = new SerialClob(ch);
qr.update("insert into t1 values(?,?)", 1,clob);//类型不批配。流不是数据库的类型
}
//大二进制:了解
/
create table t2(
id int primary key,
content longblob
);
/
@Test//大二进制类型===Blob
public void testBlob()throws Exception{
InputStream in = new FileInputStream("src/22.jpg");
byte b[] = new byte[in.available()];
in.read(b);
in.close();
Blob blob = new SerialBlob(b);
qr.update("insert into t2 values(?,?)", 1,blob);//类型不批配。流不是数据库的类型
}
3.ResultSetHander接口
用于处理ResultSet结果集,将结果集的的数据转换成不同形式。
public class ResultSetHandlerDemo {
private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
//ArrayHandler:适合结果只有一条的情况。把第一条记录的每列的值封装到一个Object[]数组中
@Test
public void test1() throws Exception{
//ArrayListHandler:适合结果有多条的情况。把每列的值封装到Object[]数组中,把Object[]放到List中
@Test
public void test2() throws Exception{
List list = qr.query("select * from student", new ArrayListHandler());
for(Object[] objs:list){
System.out.println("----------------");
for(Object obj:objs){
System.out.println(obj);
}
}
}
//ColumnListHandler:适合取某列的值。把取到值封装到List中
@Test
public void test3() throws Exception{
List list = qr.query("select * from student", new ColumnListHandler("name"));
for(Object obj:list){
System.out.println(obj);
}
}
//KeyedHandler:查询多条记录。每条记录封装到一个Map中,key:字段名,value:字段值。再把Map作为value放到另外一个Map中,该Map的key为指定的列值作为key。
@Test
public void test4() throws Exception{
Map> bmap = qr.query("select * from student", new KeyedHandler("id"));
for(Map.Entry> bme:bmap.entrySet()){
System.out.println("--------------------");
for(Map.Entry lme:bme.getValue().entrySet()){
System.out.println(lme.getKey()+"="+lme.getValue());
}
}
}
//MapHandler:适合一条结果。封装到一个Map中,key:字段名,value:字段值
@Test
public void test5() throws Exception{
Map map = qr.query("select * from student", new MapHandler());
for(Map.Entry lme:map.entrySet()){
System.out.println(lme.getKey()+"="+lme.getValue());
}
}
//MapListHandler:适合多条结果。把每条封装到一个Map中,key:字段名,value:字段值,在把Map封装到List中
@Test
public void test6() throws Exception{
List> list = qr.query("select * from student", new MapListHandler());
for(Map map:list){
System.out.println("--------------------");
for(Map.Entry lme:map.entrySet()){
System.out.println(lme.getKey()+"="+lme.getValue());
}
}
}
//ScalarHandler:适合取结果只有一行和一列的情况。
@Test
public void test7() throws Exception{
Object obj = qr.query("select count() from student", new ScalarHandler(1));
// System.out.println(obj.getClass().getName());
Long l = (Long)obj;
System.out.println(l.intValue());
System.out.println(obj);
}