Java連線oracle資料庫的兩種常用方法

@ 小浩發表於2014-01-08

據我所知,使用jdbc連線上oracle有兩種方法:

1、 使用thin連線

由於thin驅動都是純Java程式碼,並且使用TCP/IP技術通過java的Socket連線上Oracle資料庫,所以thin驅動是與平臺無關的,你無需安裝Oracle客戶端,只需要下載一個thin驅動的jar包,並且將環境變數中的CLASS_PATH變數中加入thin驅動的路徑就可以了。Thin驅動雖然與平臺無關,也無需安裝Oracle客戶端,但是有一個致命的缺陷就是效能一般,達不到如OCI方式的企業級的要求。另外,如果一個oracle資料庫對應一臺主機,可以使用thin連線;如果一個oracle資料庫對應四五臺主機(叢集伺服器),使用thin時,需要把tnsnames.ora檔案中的相關資料庫的整個連線字串都拷貝下來,如此才能連線上oracle叢集資料庫。而這種方法也是和數位同事討論並Google了大量資料後才發現的。之前我一直以為thin不支援叢集資料庫的方式。

然後就是設定連線字串了。這個是固定的寫法,如下所示:

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@10.87.134.107:1521:ora9","sms" , "zzsms");

在上面的連線字串中,如果不是叢集資料庫就在@後直接輸入資料庫IP地址即可;如果是叢集資料庫,則需要在@後輸入tnsnames.ora檔案中有關該資料庫的所有描述內容(通常是=後邊的所有的內容)。

2、 使用oci連線(Oracle Call Interface)

使用OCI連線資料庫是企業級的做法,適應於單個資料庫和叢集資料庫,效能優越,尤其是連線池功能大大提高了應用程式的效能和併發量。唯一的缺點是,若想使用OCI必須要安裝Oracle客戶端。

安裝完Oracle客戶端後,裡面有個jdbc的資料夾,該資料夾下就包含了OCI驅動和THIN驅動。所以是不需要去網上下載的。這個驅動在jdbc/lib資料夾下,主要有classes12.jar、nls_charset12.jar等等。其中以12結尾的驅動包適應於jdk1.1以上的版本。以11結尾的適應於jdk1.1以下的版本。檔名中含有classes的jar包就是驅動程式,檔名中含有nls的jar包是與國際化有關的類。

找到檔案後,就需要把class和nls的jar包的絕對路徑加入CLASS_PATH環境變數,否則會報ClassNotFound的異常。

設定環境變數後,就可以直接使用OCI驅動了,不要被“驅動”兩個字嚇壞了,(驅動就是一個可執行檔案和一個連線字串)。很簡單,無非是連線字串的問題。標準的連線字串如下所示:

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection("jdbc:oracle:oci:@xxzc","duansiyuan", "oracle_password");

只要這兩行,就可以保證連線到資料庫,而這個資料庫不管是單個資料庫還是叢集資料庫。其中xxzc就是資料庫名,duansiyuan就是使用者名稱,oralce_password就是密碼。這種方式和C#中的方式比較類似。

需要注意的問題:

1、oracle_home/jdbc資料夾下有大量的樣板程式碼和幫助文件,裡面對如何安裝和使用jdbc都有詳細的說明,請引起高度重視並耐心閱讀。裡面有很多知識僅通過自己反覆的實踐是無法獲取的。

2、如果想要高效能,請使用OCI連線,如果不想裝Oracle客戶端,請使用thin連線。

相關文章