?? dbconnectionmanager.java
字號:
package cn.com.iaspec.workflow.organize.ext;
import java.sql.*;
import java.util.*;
/**
*
* <p>Title:數據庫連接池管理</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: IASPEC Technologies</p>
* @author xiesonglin
* @version 1.0
*/
public class DBConnectionManager{
private final static DBConnectionManager instance=new DBConnectionManager();
private String dataBaseType="ORACLE";
private DBConnectionPool pool;
/**
* Use singleton pattern, only return one instance of DBConnectionManager.
* @return DBConnectionManager
*/
public static DBConnectionManager getInstance(){
return instance;
}
public String getDataBaseType(){
return dataBaseType==null?"":dataBaseType.toUpperCase();
}
/**
* Get a connection
* @return Connection
* @throws SQLException this method
*/
public Connection getConnection()
throws SQLException{
return pool.getConnection();
}
/**
* Free a connection
* @param con connection
* @throws SQLException this method
*/
public void freeConnection(Connection con)
throws SQLException{
pool.freeConnection(con);
}
private DBConnectionManager(){
init();
}
private void init(){
String driver=ConnectProperties.dbDriver;
String url=ConnectProperties.dbUrl;
String user=ConnectProperties.dbUser;
String password=ConnectProperties.dbPassword;
dataBaseType=ConnectProperties.dataBaseType;
int maxConn=Integer.parseInt(ConnectProperties.maxConnect);
try{
Class.forName(driver);
}
catch(ClassNotFoundException ex){
ex.printStackTrace();
}
pool=new DBConnectionPool(url,user,password,maxConn);
}
// inner class
class DBConnectionPool{
private Vector freeConnections=new Vector();
private int maxConn;
private int connNumb;
private String URL;
private String password;
private String user;
public DBConnectionPool(String URL,String user,String password,int maxConn){
this.URL=URL;
this.user=user;
this.password=password;
this.maxConn=maxConn;
}
public synchronized void freeConnection(Connection con){
System.out.println("begin freeConnection...");
freeConnections.addElement(con);
connNumb--;
notifyAll();
System.out.println("connection count is:"+connNumb);
}
public synchronized Connection getConnection()
throws SQLException{
Connection con=null;
if(freeConnections.size()>0){
con=(Connection)freeConnections.firstElement();
freeConnections.removeElementAt(0);
try{
if(con.isClosed()){
con=getConnection();
}
}
catch(SQLException e){
con=getConnection();
}
}
else if(maxConn==0||connNumb<maxConn){
con=newConnection();
}
if(con!=null){
connNumb++;
}
System.out.println("connection count is:"+connNumb);
return con;
}
private Connection newConnection()
throws SQLException{
System.out.println("begin newConnection...");
Connection con=DriverManager.getConnection(URL,user,password);
return con;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -