訪問 Oracle 數據庫的實例描述
如果你要使用本文中所給出的相關示例來訪問 Oracle 數據庫,那么你的開發計算機上就需要安裝下面的軟件組件(請參見“下載”portlet 以獲得鏈接):即支持 JDK 1.6 的 Oracle JDBC 瘦驅動程序 。
Oracle 通用連接池庫
Oracle JDBC 瘦驅動程序是一個 Type IV JDBC 驅動程序,這意味著它獨立于平臺,并且在與 Oracle 數據庫交互的客戶端上不需要任何額外的 Oracle 軟件。因此,您可以從 JDBC 驅動程序下載頁面下載包含相應瘦驅動程序版本類別的 JAR 文件,然后將該驅動程序安裝在您的計算機上,無需安裝/升級任何其他的 Oracle 軟件。
要安裝該驅動程序,您只需將其 JAR 文件復制到本地文件系統,然后將這些 JAR 的路徑包括在 CLASSPATH 環境變量中。例如,您可能包括以下路徑:
ORACLE_HOME/jdbc/lib/ojdbc6.jar ORACLE_HOME/jlib/orai18n.jar
如果您的計算機上已經安裝了 Oracle 數據庫,則瘦驅動程序也已經隨 Oracle 數據庫安裝到您的計算機上。
但是,由于瘦驅動程序獨立于任何其他 Oracle 軟件,因此您可以通過使用相應的 JAR 文件(可以在 JDBC 驅動程序下載頁面找到)輕松升級到該驅動程序的***版本。
UCP 是從 11.1.0.7 版開始引入 Oracle 數據庫 11g 的一個新特性。該特性從 Oracle 應用服務器 11g 第 1 版開始就包含在 Oracle 應用服務器中。如果您使用的是未裝載 UCP 的 JAR 文件(名為 ucp.jar)的舊版本軟件,或者您希望升級到***的 UCP 版本,可以從 Oracle 數據庫 UCP 下載頁面獲取 ucp.jar。
該程序包包含 UCP 的類,以便于將其包括在類路徑中來啟用該特性。所包括的路徑可能如下所示:
ORACLE_HOME/ucp/lib/ucp.jar
使用 UCP 緩存 JDBC 連接
如果您要開發數據庫密集型應用程序,可能會因使用連接池獲益。因為這樣您能夠重用連接,而不是在每次請求連接時都重新創建一個新連接。連接池節約了創建新數據庫連接所需的資源,并提高了應用程序的性能,因為創建新連接始終是一個性能密集型操作。
Oracle Universal Connection Pool for JDBC 表示一個用于緩存 JDBC 連接的全功能實現。UCP 是一個非常有用的特性,它將使您可以重用連接對象,從而可以提高獲取連接過程的速度并節約打開新數據庫連接所需的資源。
假設您希望創建一個 UCP JDBC 連接池來重用到 HR/HR Oracle 數據庫示例模式的已建立連接。以下程序是一個 UCP JDBC 連接池實際運行的簡單示例,將向您展示如何完成此操作。您將首先創建一個支持池的數據源實例,然后設置連接和池的屬性。完成后,您將從池中借用一個連接,然后使用該連接與數據庫交互。***,您將關閉該連接,將其返回到池。
- import java.sql.*; import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
public class UcpConnection { public static void main(String args[])
throws SQLException
{ try { //Creating a pool-enabled data source PoolDataSource pds
= PoolDataSourceFactory.getPoolDataSource();
//Setting connection properties of the data source pds.
setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE"); pds.setUser("hr");
pds.setPassword("hr"); //Setting pool properties pds.setInitialPoolSize(5);
pds.setMinPoolSize(5); pds.setMaxPoolSize(10);
//Borrowing a connection fro th oo Connection con = pds.getConnection();- ount(); System.out.println("\nAvailable connections: " + avlConnCount);
int brwConnCount = pds.getBorrowedConnectionsCount();
System.out.println("\nBorrowed connections: " + brwConnCount);
//Working with the connection Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select user from dual");
while(rs.next()) System.out.println("\nConnected as: "+rs.getString(1));
rs.close(); //Returning the connection to the pool conn.close(); conn=null;
System.out.println("\nConnection returned to the pool");
//Checking the number of available and borrowed connections again avlConnCount =
pds.getAvailableConnectionsCount();
System.out.println("\nAvailable connections: " + avlConnCount);
brwConnCount = pds.getBorrowedConnectionsCount();
System.out.println("\nBorrowed connections: " + brwConnCount); }
catch(SQLException e) { System.out.println("\nAn SQL exception occurred : " + e.getMessage()); } } }
這里值得注意的是關閉連接時的變化。以上程序的輸出闡釋了關閉從 UCP JDBC 連接池中借用的連接將使該連接返回到池,以供下一次連接請求使用。
該應用程序的輸出應如下所示:
- Connection borrowed from the poolAvailable connections:
4Borrowed connections: 1Connected as:
HRConnection returned to the poolAvailable
connections: 5Borrowed connections: 0
使用 JNDI 借用連接
您還可以提前創建支持池的數據源并將其綁定到 Java 命名和目錄接口 (JNDI) 上下文和邏輯名稱,而不是像在之前的示例中那樣即時創建。將數據源注冊到 JNDI 后,可以通過執行 JNDI 查找(指定與數據源綁定的 JNDI 名稱)來獲取其實例。
假設您要注冊一個支持池的數據源以重用到 HR/HR 數據庫模式的連接,并將該數據源與 JNDI 樹中的邏輯名稱 jdbc/HRPool 相關聯。為此,必須創建一個表示上述數據源的 PoolDataSource 對象,設置其屬性,然后將其注冊到一個 JNDI 命名服務。使用以下 Java 程序可以完成此操作:
- import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource; import javax.naming.*;
import java.util.Hashtable; public class JNDIRegister
{ public static void main(String argv[])
{ try { //Creating a pool-enabled data source instance and
setting its properties PoolDataSource pds = PoolDataSourceFactory.
getPoolDataSource(); pds.setConnectionFactoryClassName
("oracle.jdbc.pool.OracleDataSource"); pds.setURL
("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("hr"); pds.setPassword("hr");
pds.setInitialPoolSize(5); pds.setMinPoolSize(5);
pds.setMaxPoolSize(10); //Registering the data source with
JNDI Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"
com.sun.jndi.fscontext.RefFSContextFactory");
Context ctx = new InitialContext(env);
ctx.bind("jdbc/HRPool", pds); } catch
(Exception e) { System.out.println(e); } } }
必須先設置 Sun 的文件系統 JNDI 服務提供程序(可在此處下載),然后才能運行此程序。確保將以下 JAR 文件添加到類路徑中,
【編輯推薦】