Java數(shù)據(jù)庫連接池(經(jīng)典)
轉(zhuǎn)載自:http://langzixin.iteye.com/blog/808975
不錯的案例,收藏起來,要不時間長了就找不到了

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了富裕免費建站歡迎大家使用!
-
// 唯一實例
-
/**
-
* 返回唯一實例.如果是第一次調(diào)用此方法,則創(chuàng)建實例
-
*
-
* @return DBConnectionManager 唯一實例
-
*/
-
/**
-
* 建構(gòu)函數(shù)私有以防止其它對象創(chuàng)建本類實例
-
*/
-
/**
-
* 將連接對象返回給由名字指定的連接池
-
*
-
* @param name 在屬性文件中定義的連接池名字
-
* @param con 連接對象
-
*/
-
/**
-
* 獲得一個可用的(空閑的)連接.如果沒有可用連接,且已有連接數(shù)小于最大連接數(shù)
-
* 限制,則創(chuàng)建并返回新連接
-
*
-
* @param name 在屬性文件中定義的連接池名字
-
* @return Connection 可用連接或null
-
*/
-
/**
-
* 獲得一個可用連接.若沒有可用連接,且已有連接數(shù)小于最大連接數(shù)限制,
-
* 則創(chuàng)建并返回新連接.否則,在指定的時間內(nèi)等待其它線程釋放連接.
-
*
-
* @param name 連接池名字
-
* @param time 以毫秒計的等待時間
-
* @return Connection 可用連接或null
-
*/
-
/**
-
* 關(guān)閉所有連接,撤銷驅(qū)動程序的注冊
-
*/
-
// 等待直到最后一個客戶程序調(diào)用
-
"撤銷JDBC驅(qū)動程序 " + driver.getClass().getName()+"的注冊");
-
}
-
"無法撤銷下列JDBC驅(qū)動程序的注冊: " + driver.getClass().getName());
-
}
-
}
-
}
-
-
/**
-
* 根據(jù)指定屬性創(chuàng)建連接池實例.
-
*
-
* @param props 連接池屬性
-
*/
-
".url")) {
-
String poolName = name.substring("."));
-
String url = props.getProperty(poolName + ".url");
-
"沒有為連接池" + poolName + "指定URL");
-
".user");
-
String password = props.getProperty(poolName + ".password");
-
String maxconn = props.getProperty(poolName + ".maxconn", "0");
-
-
"錯誤的最大連接數(shù)限制: " + maxconn + " .連接池: " + poolName);
-
max = "成功創(chuàng)建連接池" + poolName);
-
}
-
}
-
}
-
-
/**
-
* 讀取屬性完成初始化
-
*/
-
"/db.properties");
-
Properties dbProps = "讀取數(shù)據(jù)成功!");
-
}
-
"不能讀取屬性文件. " +
-
"請確保db.properties在CLASSPATH指定的路徑中");
-
"logfile", "DBConnectionManager.log");
-
System.out.print(logFile);
-
"無法打開日志文件: " + logFile);
-
log = /**
-
* 裝載和注冊所有JDBC驅(qū)動程序
-
*
-
* @param props 屬性
-
*/
-
"drivers");
-
StringTokenizer st = "成功注冊JDBC驅(qū)動程序" + driverClassName);
-
}
-
"無法注冊JDBC驅(qū)動程序: " +
-
driverClassName + ", 錯誤: " + e);
-
}
-
}
-
}
-
-
/**
-
* 將文本信息寫入日志文件
-
*/
-
": " + msg);
-
}
-
-
/**
-
* 將文本信息與異常寫入日志文件
-
*/
-
": " + msg);
-
e.printStackTrace(log);
-
}
-
-
/**
-
* 此內(nèi)部類定義了一個連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最
-
* 大連接數(shù)為止.在返回連接給客戶程序之前,它能夠驗證連接的有效性.
-
*/
-
/**
-
* 創(chuàng)建新的連接池
-
*
-
* @param name 連接池名字
-
* @param URL 數(shù)據(jù)庫的JDBC URL
-
* @param user 數(shù)據(jù)庫帳號,或 null
-
* @param password 密碼,或 null
-
* @param maxConn 此連接池允許建立的最大連接數(shù)
-
*/
-
/**
-
* 將不再使用的連接返回給連接池
-
*
-
* @param con 客戶程序釋放的連接
-
*/
-
// 將指定連接加入到向量末尾
-
freeConnections.addElement(con);
-
checkedOut--;
-
notifyAll();
-
}
-
-
/**
-
* 從連接池獲得一個可用連接.如沒有空閑的連接且當(dāng)前連接數(shù)小于最大連接
-
* 數(shù)限制,則創(chuàng)建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,
-
* 然后遞歸調(diào)用自己以嘗試新的可用連接.
-
*/
-
// 獲取向量中第一個可用連接
-
con = (Connection) freeConnections.firstElement();
-
freeConnections.removeElementAt("從連接池" + name+"刪除一個無效連接");
-
// 遞歸調(diào)用自己,嘗試再次獲取可用連接
-
con = getConnection();
-
}
-
}
-
"從連接池" + name+"刪除一個無效連接");
-
// 遞歸調(diào)用自己,嘗試再次獲取可用連接
-
con = getConnection();
-
}
-
}
-
/**
-
* 從連接池獲取可用連接.可以指定客戶程序能夠等待的最長時間
-
* 參見前一個getConnection()方法.
-
*
-
* @param timeout 以毫秒計的等待時間限制
-
*/
-
// wait()返回的原因是超時
-
/**
-
* 關(guān)閉所有連接
-
*/
-
"關(guān)閉連接池" + name+"中的一個連接");
-
}
-
"無法關(guān)閉連接池" + name+"中的連接");
-
}
-
}
-
freeConnections.removeAllElements();
-
}
-
-
/**
-
* 創(chuàng)建新的連接
-
*/
-
"連接池" + name+"創(chuàng)建一個新的連接");
-
}
-
"無法創(chuàng)建下列URL的連接: " + URL);
-
-
<%@ page language="java" "java.util.*" pageEncoding="UTF-8"%>
-
<%@ page "java.sql.*"%>
-
<%@ page "myDB.DBConnectionManager"%>
-
<%
-
String path = request.getContextPath();
-
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
-
%>
-
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
<html>
-
<head>
-
<base href="<%=basePath%>">
-
-
<title>My JSP 'index.jsp' starting page</title>
-
<meta http-equiv="pragma" content="no-cache">
-
<meta http-equiv="cache-control" content="no-cache">
-
<meta http-equiv="expires" content="0">
-
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
-
<meta http-equiv="description" content="This is my page">
-
<!--
-
<link rel="stylesheet" type="text/css" href="styles.css">
-
-->
-
</head>
-
-
<body>
-
This is my JSP page.
-
<br>
-
<%
-
//單例模式,只是在第一次調(diào)用該方法時生成實例,在服務(wù)器中該類只保存一個實例
-
out.println("JAVA連接池類測試<br/>");
-
Connection con = dbM.getConnection("MySQLdb");//mysqldb是db.properties配置文件中設(shè)置的
-
out.print(dbM.getClient());
-
"不能獲取數(shù)據(jù)庫連接.");
-
//dbM.release();
-
}
-
"select * from first_table");
-
"<br/>");
-
}
-
rs.close();
-
stmt.close();
-
dbM.freeConnection("mysqldb", con);
-
-
}
-
-
Connection oraclecon = dbM.getConnection("oracledb");//oracledb是db.properties配置文件中設(shè)置的
-
out.print(dbM.getClient());
-
"不能獲取數(shù)據(jù)庫連接.");
-
//dbM.release();
-
}
-
"select * from on_campus_student where rownum<=5");
-
"<br/>");
-
}
-
rs.close();
-
stmt.close();
-
dbM.freeConnection("oracledb", oraclecon);
-
-
}
-
} catch (Exception ee)
-
{
-
out.print(ee.getMessage());
-
}
-
%>
-
</body>
-
</html>
7、可以方便的獲得各種數(shù)據(jù)庫連接(預(yù)先在db.properties中配置)
com.mysql.jdbc.Driver oracle.jdbc.driver.OracleDriver
不同數(shù)據(jù)庫之間用空格隔開即可
網(wǎng)頁名稱:Java數(shù)據(jù)庫連接池(經(jīng)典)
文章鏈接:http://www.chinadenli.net/article10/gcipgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、商城網(wǎng)站、網(wǎng)站設(shè)計、移動網(wǎng)站建設(shè)、Google、關(guān)鍵詞優(yōu)化
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)