1.手工连接池
(1)在静态代码块中注册驱动类
//加载mysql驱动包
static{
System.out.println("初始化mysql驱动");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("MYSQL驱动包注册失败!!");
e.printStackTrace();
}
}
(2)初始化连接池连接内容
//连接池集合
private static Vector<Connection> pool;
//配置
//1.连接池数量
private static int poolMax = 10;
//2.URL 一定要加autoReconnect=true
private static final String URL = "jdbc:mysql://127.0.0.1:3306/huawei?characterEncoding=UTF-8&serverTimezone=UTC&autoReconnect=true";
//3.数据库用户名
private static final String USER_NAME = "root";
//4.数据库密码
private static final String USER_PWD = "root123456";
static{
System.out.println("初始化mysql驱动");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("MYSQL驱动包注册失败!!");
e.printStackTrace();
}
//初始化连接池
pool = new Vector<>();
//1.初始化的连接数量
for(int i=0;i<poolMax;i++){
//创建连接
try {
Connection con = DriverManager.getConnection(URL, USER_NAME, USER_PWD);
pool.add(con);
} catch (SQLException e) {
System.err.println("获取数据库连接错误!");
e.printStackTrace();
}
}
}
(3)获取连接的方式
/**
* 获取连接
* @return
*/
public static Connection getConnectFromPool() throws PoolBGLExcption {
Connection con = null;
if(pool.size()==0){//连接池不够
System.err.println("WARING:连接池数量不够!超出连接!现已创建");
throw new PoolBGLExcption();
// try {
// con = DriverManager.getConnection(URL, USER_NAME, USER_PWD);
// } catch (SQLException e) {
// System.err.println("获取数据库连接错误!");
// e.printStackTrace();
// }
}else{//连接池中还有连接
//从集合末尾获得一个连接
con = pool.get(pool.size() - 1);
pool.remove(con);
}
return con;
}
自定义一个异常描述连接不够
public class PoolBGLExcption extends Exception{
@Override
public void printStackTrace() {
System.err.println("连接池不够了!!!!!!");
}
}
(4)归还连接的方式
/**
* 归还连接
* @param con
*/
public static void returnConnect(Connection con){
pool.add(con);
}