JDBC:Apache-DBUtils实现CRUD操作

Apache-DBUtils实现CRUD操作

1 Apache-DBUtils简介

1.commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

2.API介绍:

  • org.apache.commons.dbutils.QueryRunner
  • org.apache.commons.dbutils.ResultSetHandler
  • 工具类:org.apache.commons.dbutils.DbUtils

2 QueryRunner类及测试

该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

public class QueryRunnerTest {

	//测试插入
	@Test
	public void testInsert(){
		
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			String sql = "insert into customers(name,email,birth) values(?,?,?)";
			int insertCount = runner.update(conn, sql, "蔡徐坤", "caixukun@126.com", "1997-09-08");
			System.out.println("添加了" + insertCount + "条记录");
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	//测试查询
	/*
	 * BeanHandler:是ResultSetHandler接口的实现类,用于封装表中的一条记录。
	 */
	@Test
	public void testQuery1(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select id,name,email,birth from customers where id = ?";
			BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
			Customer customer = runner.query(conn, sql, handler, 21);
			System.out.println(customer);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	/*
	 * BeanListHandler:是ResultSetHandler接口的实现类,用于封装表中多条记录构成的集合
	 */
	@Test
	public void testQuery2(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select id,name,email,birth from customers where id < ?";
			BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
			List<Customer> list = runner.query(conn, sql, handler, 21);
			list.forEach(System.out::println);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
				
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	//测试查询
	/*
	 * MapHandler:是ResultSetHandler接口的实现类,对应表中的一条记录。
	 * 将字段及相应字段的值作为map中的key和value
	 */
	@Test
	public void testQuery3(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select id,name,email,birth from customers where id = ?";
			MapHandler handler = new MapHandler();
			Map<String, Object> map = runner.query(conn, sql, handler, 21);
			System.out.println(map);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	/*
	 * MapListHandler:是ResultSetHandler接口的实现类,对应表中的一组记录。
	 * 将字段及相应字段的值作为map中的key和value,将这些map添加到List中
	 */
	@Test
	public void testQuery4(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select id,name,email,birth from customers where id < ?";
			MapListHandler handler = new MapListHandler();
			List<Map<String,Object>> list = runner.query(conn, sql, handler, 21);
			list.forEach(System.out::println);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	/*
	 * ScalarHandler: 用于查询特殊值:比如表中数据的个数、最大生日等
	 */
	@Test
	public void testQuery5(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select count(*) from customers";
			ScalarHandler handler = new ScalarHandler();
			Long count = (Long) runner.query(conn, sql, handler);
			System.out.println("customers表中的记录数为: " + count);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	@Test
	public void testQuery6(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select max(birth) from customers";
			ScalarHandler handler = new ScalarHandler();
			Date date = (Date) runner.query(conn, sql, handler);
			System.out.println("customers表中最大生日为: " + date);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
	/*
	 * 自定义ResultHandler实现类
	 */
	@Test
	public void testQuery7(){
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			
			conn = JDBCUtils.getConnection3();
			
			String sql = "select id,name,email,birth from customers where id = ?";
			ResultSetHandler<Customer> handler = new ResultSetHandler<Customer>() {

				@Override
				public Customer handle(ResultSet rs) throws SQLException {
					if(rs.next()){
						int id = rs.getInt("id");
						String name = rs.getString("name");
						String email = rs.getString("email");
						Date birth = rs.getDate("birth");
						
						Customer cust = new Customer(id, name, email, birth);
						return cust;
					}
					
					return null;
				}
			};
			
			Customer customer = runner.query(conn, sql, handler, 19);
			System.out.println(customer);
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
		
			JDBCUtils.closeResource(conn, null, null);
		}
	}
	
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值