java dbutils工具类_DBUtils工具类

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);

}

你可能感兴趣的:(java,dbutils工具类)