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