JAVA-自定義連線池
阿新 • • 發佈:2021-12-17
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);
}