JDBC高级(2)

四、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));
		}		
	}	
}

这些实现类主要记住前两个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值