C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
使用c3p0连接数据库步骤
1、创建一个Java项目,导入c3p0-0.9.1.jar包
这个包可以到网上去下载,如果使用过Hibernate框架,就肯定知道这个包,这个包在Hibernte框架中就存在的
2、创建一个工具类,当然这个工具类因个人喜好,建与不建随自己,为了方便管理,建议还是创建好些
接下来就直接进入代码
第一步就操作了,对有基础的来说不是什么难事
创建一个DbUtil工具类
package com.tenghu.combo.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 数据库连接工具类
* @author xiaohu
*
*/
public class DbUtil {
//数据库连接
private static String url="jdbc:mysql://localhost:3306/work";
//数据库驱动
private static String driver="com.mysql.jdbc.Driver";
//数据库用户名
private static String username="root";
//密码
private static String password="xiaohu";
private ComboPooledDataSource cpds;
private static DbUtil db=new DbUtil();
public static DbUtil getInstance(){
return db;
}
private DbUtil(){
cpds=new ComboPooledDataSource();
try{
//设置驱动类
cpds.setDriverClass(driver);
//设置连接
cpds.setJdbcUrl(url);
//设置用户名
cpds.setUser(username);
//设置密码
cpds.setPassword(password);
//设置最小连接池个数
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(30);
cpds.setMaxIdleTime(60);
}catch(Exception e){
e.printStackTrace();
}
}
//获取连接对象
public Connection getConn(){
try{
return cpds.getConnection();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
//获取Statement对象
public Statement getStatement(Connection conn){
try {
return conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//获取PreparedStatement对象
public PreparedStatement getPreparedStatement(Connection conn,String sql){
try {
return conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//获取结果集
public ResultSet getResult(Statement st,String sql){
try {
return st.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public ResultSet getResult(PreparedStatement ps){
try {
return ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭对象
public void closeObject(Connection conn,Statement st,ResultSet rs){
try {
if(null!=rs)
rs.close();
if(null!=st)
st.close();
if(null!=conn)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs=null;
st=null;
conn=null;
}
}
//关闭对象
public void closeObject(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if(null!=rs)
rs.close();
if(null!=ps)
ps.close();
if(null!=conn)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs=null;
ps=null;
conn=null;
}
}
}
在这个工具类我使用了Statement与PreparedStatement两个接口,为了以后方便使用,两个都用上,以后需要用那一个则调用那一个
至于这两个接口的区别,就不多说了,在学习JDBC的时候应该就了解过了