?? dbconnectionmanager.java
字號(hào):
package com.xuanke.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author wengwy
* 數(shù)據(jù)庫連接池類,
* 使用方法:
* 1、通過調(diào)用靜態(tài)函數(shù)setParameter設(shè)置數(shù)據(jù)庫連接的參數(shù)
* 同時(shí)加載數(shù)據(jù)庫驅(qū)動(dòng)程序,如果加載失敗,則拋出MyJDBCException
* 2、通過調(diào)用靜態(tài)函數(shù)getConnection獲取數(shù)據(jù)庫連接,
* 如果連接失敗,則拋出MyJDBCException
* 如果1秒鐘連接不上,則返回空
* 3、通過freeConnection釋放連接
*
*/
public class DBConnectionManager {
private static String jdbcDriver,jdbcUrl,dbuser,dbpassword;
public static void setParameter(String driver,String url,String user,String pwd) throws MyJDBCException{
jdbcDriver=driver;
jdbcUrl=url;
dbuser=user;
dbpassword=pwd;
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new MyJDBCException("加載數(shù)據(jù)庫驅(qū)動(dòng)程序失敗");
}
}
private static final int poolsize=10;//連接池最多數(shù)據(jù)庫連接數(shù)
private static Connection[] conns=new Connection[poolsize];
private static boolean[] inused=new boolean[poolsize];
public static Connection getConnection()throws MyJDBCException{
for(int k=0;k<5;k++){
for(int i=0;i<poolsize;i++){
if(!inused[i]){//第i個(gè)連接空閑
if(conns[i]==null){//第一次使用該連接時(shí)建立數(shù)據(jù)庫連接
try {
conns[i]=DriverManager.getConnection(jdbcUrl,dbuser,dbpassword);
} catch (SQLException e) {
throw new MyJDBCException("無法連接數(shù)據(jù)庫");
}
}
inused[i]=true;
return conns[i];
}
}
try {
Thread.sleep(200); //如沒有空閑,等待200毫秒后繼續(xù)
} catch (InterruptedException e) {
// TODO 自動(dòng)生成 catch 塊
}
}
return null;
}
public static void freeConnection(Connection conn){
for (int i=0;i<poolsize;i++){
if(conns[i]==conn){
inused[i]=false;
return;
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -