JDBC的CRUD 三(使用Apache dbutils)

Apache dbutils:

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库。
它是对JDBC的简单封装,能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
核心对象:QueryRunner
构造方法:QueryRunner(DataSource ds)

注意:使用前记得下载Jar包

1. 改写工具类 :之前的工具类没有创建连接池的功能,我们改写一下

要注意连接池对象应该是一个应用只创建一次就可以的,不需要每次使用都创建一个新的连接池。
这里使用的是C3p0

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtil2 {
	//创建一个连接池:只创建一次即可
	private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
	
	/**
	 * 获得连接的方法 
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws SQLException {
		return dataSource.getConnection();
	}
	
	/**
	 * 获得连接池
	 */
	
	public static DataSource getDataSource() {
		return dataSource;
	}
	/**
	 * 释放增删改资源的方法:
	 */
	public static void release(PreparedStatement ps,Connection conn) {
		if(ps!=null) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//加速资源回收
			ps = null;
		}
		
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//加速资源回收
			conn = null;
		}
	}
	
	/*
	 * 释放查资源的方法:
	 */
	public static void release(ResultSet rs,Statement stmt,Connection conn) {
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//加速资源回收
			rs = null;
		}
		
		if(stmt!=null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//加速资源回收
			stmt = null;
		}
		
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//加速资源回收
			conn = null;
		}
	}
}

2. 添加操作

public class Dbutils_Create {
	@Test
	/**
	 * 添加操作
	 */
	public void demo() throws SQLException{
		// 创建核心类:QueryRunner:
		QueryRunner queryRunner = new QueryRunner(JDBCUtil2.getDataSource());
		queryRunner.update("insert into money values (null,?,?)", "可变参数名称",10000);
	}
}

3. 删除操作

public class Dbutils_Delete {
	@Test
	/**
	 * 删除操作
	 */
	public void demo() throws SQLException{
		// 创建核心类:
		QueryRunner queryRunner = new QueryRunner(JDBCUtil2.getDataSource());
		queryRunner.update("delete from money where id = ?", 3);
	}
}

4. 修改操作

public class Dbutils_Updata {
	@Test
	/**
	 * 修改操作
	 */
	public void demo() throws SQLException{
		// 创建核心类:
		QueryRunner queryRunner = new QueryRunner(JDBCUtil2.getDataSource());
		queryRunner.update
		("update money set name=?,money=? where id =?", "eee",20000,3);
	}
}

5. 查询操作(原始版)

	@Test
	/**
	 * 查询操作:使用JavaBean封装
	 *  (例子为多条数据(使用集合),单条数据传入单个对象即可)
	 */
	public void demo() throws SQLException {
		// 创建核心类:
		QueryRunner queryRunner = new QueryRunner(JDBCUtil2.getDataSource());
		// 执行查询
		// 第二个参数为匿名内部类
		// 因为太繁琐了 下一个例子我们使用ResultSetHandler的实现类来改写它
		List<Money> list = queryRunner.query("select * from money",
		 new ResultSetHandler<List<Money>>() {

			@Override
			public List<Money> handle(ResultSet rs) throws SQLException {
				// 新建一个集合用来
				ArrayList<Money> list = new ArrayList<Money>();
				while (rs.next()) {
					Money money = new Money();
					money.setId(rs.getInt("id"));
					money.setName(rs.getString("name"));
					money.setMoney(rs.getInt("money"));
					list.add(money);
				}
				return list;
			}
		});
		// 遍历集合
		for (Money money : list) {
			System.out.println(money);
		}
	}

查询操作(改写版)

/**
 * 查询操作:改写上面的代码
 * 使用ResultSetHandler的实现类BeanListHandler
 * 若需要封装在数组中可使用实现类:ArrayHandler和ArrayListHandler
 */
 @Test
 public void demo2() throws SQLException {
	 QueryRunner queryRunner = new QueryRunner(JDBCUtil2.getDataSource());
	 List<Money> list = queryRunner.query("select * from money", new BeanListHandler<Money>(Money.class));
	 for (Money money : list) {
		System.out.println(money);
	}

你可能感兴趣的:(工具类)