DBUtils框架是对JDBC编码进行简化处理的轻量级框架,可以把结果集转换成map、list等集合形式。
QueryRunner
1、构造方法:
QueryRunner():默认构造方法
QueryRunner(DataSource ds):需要一个数据源
例如:private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
2、具体方法:
批处理:
batch(Connection conn, String sql, Object[][] params):使用默认构造方法时
batch(String sql, Object[][] params):
Object[][]params:高维:执行的语句的条数 低维:每条语句需要的参数
例:
@Test
public void testBatch()throws Exception{
Object params[][] = new Object[10][];
for(int i=0;i<params.length;i++){
params[i] = new Object[]{i+1,"aaa"+(i+1)};//每条记录的参数
}
qr.batch("insert into t3 values(?,?)", params);
}
查询:
<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
query(Connection conn,String sql, ResultSetHandler<T> rsh, Object... params)
例如
// ArrayHandler:适用于结果集只有一条结果的情况。返回Obejct[],数组中的元素就是记录的每列数据。
@Test
public void test1() throws Exception {
Object values[] = qr.query("select * from t3", new ArrayHandler());
for (Object obj : values)
System.out.println(obj);
}
update:DML INSERT UPDATE DELETE
update(String sql, Object... params)
update(Connection conn,String sql, Object... params)
qr.update("insert into student values(?,?,?)", 1,"wf",new Date());
ArrayHandler :适用于结果集中只有一条记录的情况,返回Object[],数组中的元素就是记录的每列数据
ArrayListHandler:适用于结果集中有多条结果的情况。返回的是一个List<Object[]>,List封装了记录,Object[]每条记录的每列数据。
也就是说将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :适用于取某一列的值。返回的是List<Object>,集合中就是该列中的数据。
也就是将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :适用于结果中有多条的情况。返回的是一个Map<Object,Map<String,Object>>。
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :适用于结果有多条的情况。返回List<Map<String,Object>>,List封装了所有的记录,每条记录封装到Map中,key是字段名,value是字段值。
ScalarHandler :适用于结果中只有一行和只有一列的情况。返回的是一个Object。
例如:
// MapListHandler:适用于结果有多条的情况。List<Map<String,Object>>.List封装了所有的记录,每条记录封装到Map中,key是字段名,value,字段值。
@Test
public void test6() throws Exception {
List<Map<String, Object>> list = qr.query("select * from t3",
new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println("----------------");
for (Map.Entry<String, Object> sme : map.entrySet()) {
System.out.println(sme.getKey() + "=" + sme.getValue());
}
}
}
// ArrayListHandler:适用于结果集中有多条结果的情况。返回的是一个List<Object[]>,List封装了记录,Object[]每条记录的每列数据。
@Test
public void test2() throws Exception {
List<Object[]> records = qr.query("select * from t3",new ArrayListHandler());
for (Object[] values : records) {
System.out.println("------------------");
for (Object obj : values)
System.out.println(obj);
}
}
// KeyedHandler:适用于结果中有多条的情况。返回的是一个Map<Object,Map<String,Object>>。
@Test
public void test4() throws Exception {
Map<Object, Map<String, Object>> bmap = qr.query("select * from t3",new KeyedHandler("id"));
for (Map.Entry<Object, Map<String, Object>> bme : bmap.entrySet()) {
System.out.println("----------------");
for (Map.Entry<String, Object> sme : bme.getValue().entrySet()) {
System.out.println(sme.getKey() + "=" + sme.getValue());
}
}
}