Oracle JDBC2.0 資料來源(Data Source)與連線池(Connection Pool)
原先倒是可以用JSP寫出來小型的資料庫應用程式,不滿足單單掌握JSP,因為我寫的時候一直看不到java 完整原始碼,所以很鬱悶,呵呵.修改的時候也比較煩,Servlet 也是,out.println(“<html>”)更鬱悶.不單純的東西總是讓人變的不舒服,而單純的東西又不存在,即使追求單純的東西,過程又是如此艱難!(這也許是人類感情面臨的一個基本矛盾)從上週開始,一直致力於學習Struts了,學得也很鬱悶,資料少,抄程式碼到一個數據連線的身份驗證的時候,遇到麻煩了:如何1建立資料連線池2.配置Sturts資料庫連線池,昨天下午碰了這個下午的釘子,無論是google搜尋還是半懂不懂地看apache網站,得到的有效資訊是很少的,cadn裡發個貼請教,竟然沒有人回覆!這也許是高手不屑一顧而菜鳥卻望塵莫及的問題?
想來想去,覺得自己根本不瞭解資料連線池,所以先來好好學一下吧,僅僅一章而已,不會很痛苦.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
先想一下普通JDBC連線資料的方法:
String dirver=oracle.jdbc.driver.OracleDriver;
//(com.mysql:jdbc.Driver);
String userName=””;
String password=””;
String url=”jdbc:oracle:thin:@192.168.56.199:1521:asdb”
//jdbc:mysql://192.168.56.6:3306/mysql
String query=”SELECT * FROM EMP”
Connection conn=null;
Class.forName(driver);
Connection=DriverManager.getConnection(url,userName, password);
Statement st=conn.createment();(PreparedStatement)
ResultSet rs=st.executequery(query);
While(rs.next())
{
do something;
}
conn.close();
還有要放到try /catch 塊裡,撲捉SQLException ,當然可以用finally關閉conn.
還有一種連線方法,後面幾步都是一樣,前面的寫成:
Connext ctx=new InitailContext();
DataSource ds=(Datasource) ctx.loolup(“jdbc/asdbDB”);
//SID+DB
Connection conn=ds.getConnection(user,pwd);
這是建立資料來源連線.
接著學習oracle 的資料來源和連線池
需要 import java.naming.*;
DataSource//DataSource 是Connection 的工廠
OracleDataSource//Oracle 的DataSource 版本
ConnectionPoolDataSource//ConnectionPoolDataSource是PooledConnection的工廠
PooledConnection//PooledConnection 物件是為連線池管理提供聯的連線物件
Steps:
Step 1:建立一個連線池資料來源物件
OracleConnectionPoolDataSource
myOCPDS=new OracleConnectionPoolDateSource()
Step 2.
設定連線屬性
myOCPDS.setServerName(“Aaron”);
myOCPDS.setDataBaseName(“moon”);
myOCPDS.setPortNumber(1521);
myOCPDS.setDriverType(“thin”);
step3
建立一個緩衝的連線物件
PooledConnection myPooledConnection=myOCPDS.setPooledConnection();
Step 4
請求/使用關閉連線
Connection myConnection=myPooledConnection.getConnection();
//使用上一步建立的物件建立連線
myConnection.close();
step 5
關閉緩衝連線的物件
myPooledConnection.close();
Oracle JDBC連線快取
連線快取是一個和多個上面連線的集合,利用了連線緩衝,且不需要開發人員處理緩衝物件(PooledConnecion)
//step:1
OracleConnenctionCacheImpl
myOCCI=new OracleConnectionCacheImpl();
//step:2
然後同上面的step2
//step:3
….不需要開發人員處理PooledConnection
//step:4
Connection myConnection=myOCCl.getConnection();
myOCCI.getActiveSize();正在使用的PooledConnection物件的數量
關閉連線:
myConnection.close();
//step:5
關閉連線快取
myOCCI.close(); 這些流程類似上面的建立連線緩衝
控制PooledConnection 物件數量
myOCCI.setMaxLimit(6);最大數量的PooledConnection 物件
達到最大的數量的時候,有3種快取模式:
Dynamic:預設的,建立一個心的PooledConnection 物件
Fixed wait:等待空閒下來
Fixed with no wait:被拒絕.
myOCCI.setMinLimit(3);至少有3個PooledConnection 物件