JDBC Connection Pool
來源:互聯網
上載者:User
connection 資料庫連接池簡介
在傳統的兩層結構中,用戶端程式在啟動時開啟資料庫連接,在退出程式時關閉資料庫連接。這樣,在整個程式運行中,每個用戶端始終佔用一個資料庫連接,即使在大量沒有資料庫操作的空閑時間,如使用者輸入資料時,從而造成資料庫連接的使用效率低下。
在三層結構模式中,資料庫連接通過中介層的串連池管理。只有當使用者真正需要進行資料庫操作時,中介層才從串連池申請一個串連,資料庫操作完畢,串連立即釋放到串連池中,以供其他使用者使用。這樣,不僅大大提高了資料庫連接的使用效率,使得大量使用者可以共用較少的資料庫連接,而且省去了建立串連的時間。
串連池的配置使用
資料庫連接池是應用伺服器的一項準系統,我們以Apusic Application Server為例,來說明JDBC串連池的配置使用。
Apusic JDBC串連池提供對多種資料庫的支援,如Oracle、MS SqlServer、Sybase、Informix、DB2等。
Apusic JDBC串連池可以通過資料庫本身的JDBC Driver串連到資料庫,也可以通過JDBC-ODBC橋串連到資料庫。下面我們以Oracle為例說明如何配置串連池:
Oracle資料庫的JDBC Driver包檔案classes111.zip在/usr/oracle/jdbc/lib(假設oracle的安裝目錄是/usr/oracle)目錄下,首先將classes111.zip加入到系統的CLASSPATH中。然後在apusic/config/apusic.conf(假設安裝目錄為apusic) 中作如下設定:
<SERVICE
CLASS="com.apusic.jdbc.PoolManager"
NAME="JdbcPool:name=jdbc/sample"
>
<ATTRIBUTE NAME="ExpirationTime" VALUE="300"/>
<ATTRIBUTE NAME="MinCapacity" VALUE="5"/>
<ATTRIBUTE NAME="URL" VALUE="jdbc:oracle:thin:@192.168.19.136:1521:orcl"/>
<ATTRIBUTE NAME="ConnectionProperties" VALUE="user=gtj,password=abc123"/>
<ATTRIBUTE NAME="DriverClassName" VALUE="oracle.jdbc.driver.OracleDriver" />
<ATTRIBUTE NAME="MaxCapacity" VALUE="30"/>
</SERVICE>
ExpirationTime: 逾時時間,單位是秒。當一個資料庫連接超過expirationTime設定時間不被使用
時,系統會自動關閉這個資料庫連接。預設值為300秒
MinCapacity: 最小串連數
URL: 資料庫的URL
ConnectionProperties: 串連屬性,其中:user使用者名稱,password密碼
DriverClassName: JDBC驅動程式類名
MaxCapacity: 最大串連數
192.168.19.136: oracle所在電腦的IP地址。
調用串連池
我們以一個JSP程式為例,說明如何使用串連池。首先通過JNDI得到DataSource,再的得到串連Connection,如下例所示:
<html>
<head>
<title>Jsp sample</title>
</head>
<body>
<p>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="
java.sql.*,
javax.naming.*,
javax.sql.*
"%>
<%
try{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/sample");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select ENAME from EMP");
while(rs.next()){
out.println("<p>" + rs.getString(1));
}
rs.close();
stmt.close();
}catch(Exception e){
System.out.println("jsp:" + e.getMessage());
}finally{
try{
con.close();
}catch(Exception e1){}
}
%>
</body>
</html>