jdbc优化-DButils的使用

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量。开始用之前,

下载组件,引入jar文件 : commons-dbutils-1.6.jar。

QueryRunner类

QueryRunner类是dbutils的核心工具类对象,简化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。定义了所有的与数据库操作的方法(查询、更新)。

 1.Int  update(Connection conn, String sql, Object param);   执行更新带一个占位符的sql

2. Int  update(Connection conn, String sql, Object…  param); 执行更新带多个占位符的sql

3. T  query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params) 

4. Int  update( String sql, Object param);

5. Int  update( String sql, Object…  param);

6. Int[]  batch( String sql, Object[][] params) 

注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);

DbUtils提供的封装结果的一些对象:

1) BeanHandler: 查询返回单个对象

2) BeanListHandler: 查询返回list集合,集合元素是指定的对象

3)  ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]

4)  ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中

5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)

6)  MapHandler  查询返回结果的第一条记录封装为map

下面的代码是关于dbutils的一些适用:

 

public class dbutil_query {
	private Connection conn;
	//1.自定义结果集来封装数据
	@Test
	public void test1() throws Exception{
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询
		Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {

			public Admin handle(ResultSet rs) throws SQLException {
				// TODO Auto-generated method stub

				if(rs.next()){
					Admin admin = new Admin();
					admin.setId(rs.getInt("id"));
					admin.setUserName(rs.getString("userName"));
					admin.setPwd(rs.getString("pwd"));
					return admin;
				}
				return null;
			}
		}, 2);

		// 测试
		System.out.println(admin);
		// 关闭
		conn.close();

	}
	//2.使用组件提供的结果集对象封装数据(查询)
	//(1)BeanHandler:查询返回单个对象
	@Test
	public void test2() throws Exception {
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询返回单个对象
		Admin admin =  qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 3);
		
		System.out.println(admin);
		conn.close();
	}
	//(2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
	@Test
	public void test3() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询全部数据
		List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
		
		System.out.println(list);
		conn.close();
	}
	//(3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
	@Test
	public void test4() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		Object[] obj = qr.query(conn, sql, new ArrayHandler());
		//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
		//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}
	//(4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
	@Test
	public void test5() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		//Object[] obj = qr.query(conn, sql, new ArrayHandler());
		List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
		//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}
	//(5)ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
	@Test
	public void test6() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		//Object[] obj = qr.query(conn, sql, new ArrayHandler());
		//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		Long num = qr.query(conn, sql, new ScalarHandler<Long>());
		//Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}
	//(6)MapHandler  查询返回结果的第一条记录封装为map
	@Test
	public void test7() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		//Object[] obj = qr.query(conn, sql, new ArrayHandler());
		//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
		Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}
	
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值