c3p0
下载网址
https://sourceforge.net/projects/c3p0/
导入连接池
因为c3p0还依赖一个mchange的一个jar包,所以也需要导入,不然会报错
右键Build Path
操作步骤
- 导入两个jar包
- 定义成员数据源 private static ComboPooledDataSource ds;
- 在静态代码块中进行数据源初始化
调用
con = C3P0DateSource.getConnection();
关闭
finally {
C3P0DateSource.close(pstmtTwo, pstmtTwo, con);
}
封装的c3p0数据源代码
package jdbc;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0DateSource {
private static final String connectionUrl = "jdbc:mysql://localhost:3306/web01?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";
private static final String user = "root";
private static final String passWord = "121156";
//定义成员数据源
private static ComboPooledDataSource ds;
static {
//数据源初始化
try {
ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.cj.jdbc.Driver");
ds.setJdbcUrl(connectionUrl);
ds.setUser(user);
ds.setPassword(passWord);
//初始连接数
ds.setInitialPoolSize(5);
//最大链接个数
ds.setMaxPoolSize(20);
//等等还有许多
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
private static void closeConnection(Connection con) {
try {
if (con != null)
con.close();
//这里会把链接归还给jdbc连接池,并不是真正的断开链接
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用
//获取字段名
public static void acquireFiled(String tableName) {
Connection con = null;
PreparedStatement pstmtOne = null;
ResultSet rs = null;
ResultSetMetaData rsmd =null;
try {
con = UtilityC3P0.getConnection();
// con.setAutoCommit(false); //开启事务 true自动提交 false手动提交
String sql = "SELECT*FROM"+" "+tableName;
System.out.println(sql);
pstmtOne = con.prepareStatement(sql);
// 4.查询 获取返回的数据的结果集
rsmd = pstmtOne.getMetaData();// executeXXX
// next() 用来查询有没有数据 每次调用获取一行,有数据返回true,没有返回false;
// 和iterator遍历器有点像
System.out.println(rsmd.getColumnName(1));
} catch (Exception e) {
e.printStackTrace();
} finally {
// 因为此时我们需要关闭两个pstmt,传递两个pstmt参数,所以我们需要完善我们的工具类
// UtilityC3P0.close(pstmtTwo, pstmtTwo, con);
UtilityC3P0.close(con);
}
// return "null";
}