四、DBUtils的使用
常用API:
一般情况下如果执行CRUD的操作:
构造:
QueryRunner(DataSource ds);
方法:
int update(String sql,Object… args);
T query(String sql,ResultSetHandler rsh,Object… args);
有事务管理的执行CRUD的操作
构造:
QueryRunner();
方法:
int update(Connection conn,String sql,Object… args);
T query(Connection conn,String sql,ResultSetHandler rsh,Object… args);
执行批处理
batch(Connection conn,String sql,Object [] [] args)
处理事务:
commitAndCloseQuietly(Connection conn)
rollbackAndCloseQuietly(Connection conn)
下面的是一些ResultSetHandler的实现类
-
BeanHandler 将一条记录封装到一个JavaBean中。
-
BeanListHandler将多条记录封装到一个装有JavaBean的List集合中。
-
MapHandler将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是表中列的记录值。
-
MapListHandler将多条记录封装到一个装有Map的List集合中。**
-
ColumnListHandler将数据中的某列封装到List集合中。
-
ScalarHandler将单个值封装。
-
KeyedHandler(了解)将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的Map集合中。而且外面的Map的key是可以指定的。
-
ArrayHandler将一条记录封装到一个数组当中。这个数组应该是Object[]。
-
ArrayListHandler将多条记录封装到一个装有Object[]的List集合中。
-
注意:这些实现类很大程度上方便了开发
public class Demo02 {
@Test
//new BeanHandler<YinHang>(YinHang.class):将一条记录封装到JavaBean中
public void demo01() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
YinHang query = qr.query("select * from yinhang where id = ?", new BeanHandler<YinHang>(YinHang.class),4);
System.out.println(query);
}
@Test
//new BeanListHandler<YinHang>(YinHang.class):将多条记录封装到一个装有JavaBean的List集合中。
public void demo02() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
List<YinHang> query = qr.query("select * from yinhang", new BeanListHandler<YinHang>(YinHang.class));
for (YinHang yinHang : query) {
System.out.println(yinHang);
}
}
@Test
//MapHandler:将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是表中列的记录值。
public void demo03() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
Map<String, Object> query = qr.query("select * from yinhang where id = ?", new MapHandler(),4);
System.out.println(query);
}
@Test
//MapListHandler:将多条记录放入到一个有Map集合的List集合中
public void demo04() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
List<Map<String,Object>> query = qr.query("select * from yinhang", new MapListHandler());
for (Map<String, Object> map : query) {
System.out.println(map);
}
}
@Test
//ArrayHandler:将一条记录放入到一个数组中
public void demo05() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
Object[] query = qr.query("select * from yinhang where id = ?", new ArrayHandler(),4);
System.out.println(Arrays.toString(query));
}
@Test
//ArrayListHandler:将多条记录放入到一个数组集合中
public void demo06() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
List<Object[]> query = qr.query("select * from yinhang", new ArrayListHandler());
for (Object[] objects : query) {
System.out.println(Arrays.toString(objects));
}
}
@Test
//ColumnListHandler:将某列的值封装到List集合中,该实现类中的String值就是该数据库的列值
public void demo07() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
List<Object> query = qr.query("select name,price from yinhang", new ColumnListHandler("name"));
System.out.println(query);
}
@Test
//ScalarHandler封装一个值
public void demo08() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
Object query = qr.query("select avg(*) from yinhang", new ScalarHandler());
System.out.println(query);
}
@Test
//KeyedHandler:将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的Map集合中。而且外面的Map的key是可以指定的。
public void demo09() throws SQLException{
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource()) ;
Map<Object, Map<String, Object>> query = qr.query("select * from yinhang", new KeyedHandler("id"));
Set<Object> keySet = query.keySet();
for (Object object : keySet) {
System.out.println(object+"---"+query.get(object));
}
}
}
这些实现类主要记住前两个。