java程序員從笨鳥到菜鳥之(七)一—java數據庫操作 - 下載本文

}

break; // 己經找到一個可用的連接,退出 } }

return conn;// 返回找到到的可用連接 } /**

* 測試一個連接是否可用,如果不可用,關掉它并返回 false

* 否則可用返回 true *

* @param conn 需要測試的數據庫連接

* @return 返回 true 表示此連接可用, false 表示不可用 */

private boolean testConnection(Connection conn) {

try {

// 判斷測試表是否存在

if (testTable.equals(\

// 如果測試表為空,試著使用此連接的 setAutoCommit() 方法

// 來判斷連接否可用(此方法只在部分數據庫可用,如果不可用 ,

// 拋出異常)。注意:使用測試表的方法更可靠

conn.setAutoCommit(true);

} else {// 有測試表的時候使用測試表測試

//check if this connection is valid

Statement stmt = conn.createStatement();

stmt.execute(\ }

} catch (SQLException e) {

// 上面拋出異常,此連接己不可用,關閉它,并返回 false;

closeConnection(conn);

return false; }

// 連接可用,返回 true

return true; } /**

* 此函數返回一個數據庫連接到連接池中,并把此連接置為空閑。

* 所有使用連接池獲得的數據庫連接均應在不使用此連接時返回它。 *

* @param 需返回到連接池中的連接對象 */

public void returnConnection(Connection conn) {

// 確保連接池存在,如果連接沒有創建(不存在),直接返回

if (connections == null) {

System.out.println(\連接池不存在,無法返回此連接到連接池中 !\

return; }

PooledConnection pConn = null;

Enumeration enumerate = connections.elements();

// 遍歷連接池中的所有連接,找到這個要返回的連接對象

while (enumerate.hasMoreElements()) {

pConn = (PooledConnection) enumerate.nextElement();

// 先找到連接池中的要返回的連接對象

if (conn == pConn.getConnection()) {

// 找到了 , 設置此連接為空閑狀態

pConn.setBusy(false);

break; }

} } /**

* 刷新連接池中所有的連接對象 * */

public synchronized void refreshConnections() throws SQLException {

// 確保連接池己創新存在

if (connections == null) {

System.out.println(\連接池不存在,無法刷新 !\

return; }

PooledConnection pConn = null;

Enumeration enumerate = connections.elements();

while (enumerate.hasMoreElements()) {

// 獲得一個連接對象

pConn = (PooledConnection) enumerate.nextElement();

// 如果對象忙則等 5 秒 ,5 秒后直接刷新

if (pConn.isBusy()) {

wait(5000); // 等 5 秒 }

// 關閉此連接,用一個新的連接代替它。

closeConnection(pConn.getConnection());

pConn.setConnection(newConnection());

pConn.setBusy(false); } } /**

* 關閉連接池中所有的連接,并清空連接池。 */

public synchronized void closeConnectionPool() throws SQLException {





天津时时彩开奖号码表