package cn.sxt.empmgr.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
public class MyConnectionPool {
//准备容器,用于 存储多个连接对象
private static LinkedList<Connection>pool;
//初始化容器
static{
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//预先往连接池放入一些连接对象
pool=new LinkedList<Connection>();
for(int i=0;i<5;i++){
Connection conn=initConnection();
if(null!=conn){
System.out.println("初始化一个连接池成功,并且放入了连接池");
pool.add(conn);
}
}
}
/**
* 用于初始化Connection对象或者Connection代理的对象
* @return
*/
private static Connection initConnection(){
try {
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user","root","root");
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 连接池获取
* @return
*/
public static Connection getConnection(){
if(pool.size()>0){
System.out.println("连接池中还有对象,从连接池获取对象");
//如果连接池中有连接对象,那么就直接取对象
Connection conn=pool.removeFirst();
return conn;
}else{
//连接池没有对象
System.out.println("重新初始化一个连接对象了");
//如果连接池中没有对象,就创建一个连接对象
Connection conn=initConnection();
return conn;
}
}
public static void returnConnection(Connection coon){
try {
//判断还回来的连接池不为空,并且没有关闭,才能还回来
if(coon!=null&&!coon.isClosed()){
//判断连接池满了没有,没有满就放进去,满了就关闭
if(pool.size()<10){
System.out.println("归还连接对象,连接池未满");
//取第一个,放最后一个,形成一个循环
pool.addLast(coon);
}else{
System.out.println("连接池满了,直接关闭连接对象");
coon.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}