📄 dbconnectionpool.java
字号:
package eise.db;//------------------------------------------------------------------------------import java.util.*;import java.sql.*;//------------------------------------------------------------------------------public class DBConnectionPool{ private int checkedOut=0;//被占用的连接数目 private Vector freeConnections;//空闲的连接 private int maxConn;//最大的连接数 private String name;//数据库类型的名称,如MySQL, SQL SERVER, ACCESS等 private String password;//密码 private String URL;//连接的地址 private String user;//连接的用户 private DBConnectionManager connMgr=null;//------------------------------------------------------------------------------ public DBConnectionPool(DBConnectionManager connMgrObj,String nameStr, String urlStr, String userStr, String passwordStr, int maxInt){ connMgr=connMgrObj; freeConnections = new Vector(); name = nameStr; URL = urlStr; user = userStr; password = passwordStr; maxConn = maxInt; checkedOut=0; }//------------------------------------------------------------------------------ public synchronized void freeConnection(Connection connection){ freeConnections.addElement(connection); checkedOut--; notifyAll(); }//------------------------------------------------------------------------------ public synchronized Connection getConnection(){ Connection connection = null; if(freeConnections.size()>0) {connection = (Connection)freeConnections.firstElement(); freeConnections.removeElementAt(0); try{if(connection.isClosed()) {connMgr.log("此连接已经关闭:" + name); connection = getConnection(); } } catch(SQLException ee) {connMgr.log("取得连接时出现错误:" + name); connection = getConnection(); } } else if(maxConn == 0 || checkedOut < maxConn){connection = newConnection();} if(connection != null){checkedOut++;} return connection; }//------------------------------------------------------------------------------ public synchronized Connection getConnection(long limit_long){ long now_long = (new java.util.Date()).getTime(); Connection connection; while((connection = getConnection()) == null) {try{wait(limit_long);} catch(InterruptedException ee) {connMgr.log("等待空闲的连接时出现错误:" + name);} if((new java.util.Date()).getTime() - now_long >= limit_long){return null;} } return connection; }//------------------------------------------------------------------------------ private Connection newConnection(){ Connection connection = null; try{if(user == null){connection = DriverManager.getConnection(URL);} else{connection = DriverManager.getConnection(URL, user, password);} connMgr.log("成功建立新的连接:" + name); } catch(SQLException ee) {connMgr.log(ee, "建立新连接时失败: " + URL); return null; } return connection; }//------------------------------------------------------------------------------ public synchronized void release(){ for(Enumeration enumeration = freeConnections.elements(); enumeration.hasMoreElements();) {Connection connection = (Connection)enumeration.nextElement(); try{connection.close(); connMgr.log("成功关闭连接:" + name); } catch(SQLException ee) {connMgr.log(ee, "关闭连接时失败:" + name); } } freeConnections.removeAllElements(); checkedOut=0; }//------------------------------------------------------------------------------}//内部类结束//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -