1、官网下载C3P0 jar包 放到项目的lib下面
2、在src目录下新建一个c3p0-config.xml 的文件
里面 具体写
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,只可以出现一次 可以在下面使用指定名称的配置,一般使用默认配置就可以了-->
<default-config>
<!-- 连接超时设置30秒 -->
<property name="checkoutTimeout">30000</property>
<!-- 30秒检查一次connection的空闲 -->
<property name="idleConnectionTestPeriod">30</property>
<!--初始化的池大小 -->
<property name="initialPoolSize">3</property>
<!-- 最多的一个connection空闲时间 -->
<property name="maxIdleTime">30</property>
<!-- 最多可以有多少个连接connection -->
<property name="maxPoolSize">10000</property>
<!-- 最少的池中有几个连接 -->
<property name="minPoolSize">3</property>
<!-- 批处理的语句最大条数限制-->
<property name="maxStatements">150</property>
<!-- 每次增长几个连接 -->
<property name="acquireIncrement">5</property>
<!-- 数据库驱动名称 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--数据库连接url -->
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/wzxykqsys?useUnicode=true&characterEncoding=UTF-8</property>
<!-- 数据库名称 -->
<property name="user">root</property>
<!-- 数据库密码 -->
<property name="password">123456</property>
</default-config>
</c3p0-config>
3、新建一个获取数据库连接的类,里面写以下几个方法。
import java.sql.*;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBUtil {
private static DataSource ds;
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
static {
ds = new ComboPooledDataSource();//直接使用即可,不用显示的配置,其会自动识别配置文件
}
public static DataSource getDataSource() {
return ds;
}
public static Connection getConnection() {
try {
// 得到当前线程上绑定的连接
Connection conn = tl.get();
if (conn == null) { // 代表线程上没有绑定连接
conn = ds.getConnection();
tl.set(conn);
}
return conn;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void startTransaction() {
try {
// 得到当前线程上绑定连接开启事务
Connection conn=getConnection();
conn.setAutoCommit(false);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void commitTransaction() {
try {
Connection conn = tl.get();
if (conn != null) {
conn.commit();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void closeConnection() {
try {
Connection conn = tl.get();
if (conn != null) {
conn.close();
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
tl.remove(); // 千万注意,解除当前线程上绑定的链接(从threadlocal容器中移除对应当前线程的链接)
}
}
/**
* @author fulunyong
* @date 2014-11-11下午8:17:22
* @作用:查询语句母体
* @返回类型:ResultSet
*/
public static ResultSet Query(Connection con, PreparedStatement ps,
ResultSet rs, String sql, String[] canshu) {
try {
ps = con.prepareStatement(sql);
for (int i = 0; i < canshu.length; i++) {
ps.setString(i + 1, canshu[i]);
}
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
/**
* @author fulunyong
* @date 2014-11-11下午8:20:45
* @作用:更新语句母体 所有的
* @返回类型:boolean
*/
public static boolean QueryUpdata(Connection con, PreparedStatement ps,
String sql, String[] canshu) {
// 返回标志
boolean trun = true;
try {
ps = con.prepareStatement(sql);
for (int i = 0; i < canshu.length; i++) {
ps.setString(i + 1, canshu[i]);
}
trun = ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
return trun;
}
}
4、操作数据库需要获取连接时 可以直接调用上面的方法