之前转载了博文如何使用DBUtils框架和C3P0连接池,现在就通过一个类来实现使用,该类亲测运行无问题:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
importorg.apache.commons.dbutils.handlers.BeanListHandler;
importorg.apache.commons.dbutils.handlers.ScalarHandler;
import MatcherClass.HumpMatcher;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtilC3P0 {
// 创建连接池的数据源对象
//指定的是从c3p0-config.xml配置文件中选择那个链配置进行连接
//读取c3p0-config.xml name为sqlite
private staticComboPooledDataSource cpds = newComboPooledDataSource("sqlite");
private staticQueryRunner run;
publicJdbcUtilC3P0(){
cpds = newComboPooledDataSource();
run = newQueryRunner(cpds);
}
publicJdbcUtilC3P0(String sqlName){
cpds = newComboPooledDataSource(sqlName);
run = newQueryRunner(cpds);
}
// 书写返回连接对象的方法
public static ConnectiongetConn() {
try {
returncpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public T queryForObject(String sql, Object params[], Classclazz) {
T obj = null;
try {
showSql(sql);
obj = (T) run.query(sql, new BeanHandler(clazz,newBasicRowProcessor(new MyBeanProcessor(new HumpMatcher()))),params);//这里使用了我自己重写的驼峰适配器,如果默认可使用 new BeanHandler(T.Class)
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
public List queryForList(String sql, Object[] params, Classclazz) {
List obj = null;
try {
showSql(sql);
obj = (List) run.query(sql, new BeanListHandler(clazz),params);
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
public int storeInfoAndGetGeneratedKey(String sql, Object[]params) {
int pk = 0;
try {
showSql(sql);
run.update(sql, params);
pk = ((Long) run.query("SELECT LAST_INSERT_ID()", newScalarHandler(1))).intValue();
} catch (SQLException e) {
e.printStackTrace();
}
return pk;
}
public int update(String sql, Object[] params) {
int i = 0;
try {
showSql(sql);
i = run.update(sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
public int bat(String sql,Class clazz, Object[][]params){
try {
showSql(sql);
run.batch(sql, params);
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
return 0;
}
private void showSql(String sql) {
System.out.println(sql);
}
// 释放资源的操作
public static voidrelease(ResultSet rs, PreparedStatement pstmt,
Connectionconn) {
if (rs != null) {
try{
rs.close();
} catch(SQLException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
if (pstmt != null) {
try{
pstmt.close();
} catch(SQLException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
if (conn != null) {
try{
conn.close();
} catch(SQLException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
}
}
这里写一个测试的main来运行:
public static void main(String[] args) throws SQLException{
JdbcUtilC3P0 jc = new JdbcUtilC3P0();
Connection conn = JdbcUtilC3P0.getConn();
String sql = "select * from user";
List user = jc.queryForList(sql, null, User.class);
for(User u : user){
System.out.println(u);
}
// sql = "insert into user (address, name, tel_number) values(?, ?, ?)";
// Object[][] upra ={{"大望路东","刘兰","1234"},{"大屯路15号","汪涵","2345"}};
// jc.insertBat(sql, User.class, upra);
JdbcUtilC3P0.release(null, null, conn);
}
到这里就全部完成啦,Mark一下,供以后参考