1. 程式人生 > >Oracle JDBC2.0 資料來源(Data Source)與連線池(Connection Pool)

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//ConnectionPoolDataSourcePooledConnection的工廠

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);至少有3PooledConnection 物件