Java學(xué)習(xí)不再難!使用OCI驅(qū)動(dòng)連接Oracle數(shù)據(jù)庫實(shí)現(xiàn)方法
Java程序連接oracle數(shù)據(jù)庫時(shí),用oci驅(qū)動(dòng)要比用thin驅(qū)動(dòng)性能好些。主要的區(qū)別是使用thin驅(qū)動(dòng)時(shí),不需要安裝oracle的客戶端,而使用oci時(shí)則要安裝oracle的客戶端。?
??? 從使用thin驅(qū)動(dòng)切換到oci驅(qū)動(dòng)在配置來說很簡單,只需把連接字符串java:oracle:thin:@hostip:1521:實(shí)例名換為java:oracle:oci@本地服務(wù)名即可。如:?
從?
jdbc:oracle:thin:@10.1.1.2:1521:shdb?
改成?
jdbc:oracle:oci8:@shdb??
??? 但這里這臺(tái)機(jī)需安裝oracle數(shù)據(jù)庫的客戶端并配置本地服務(wù)名,同時(shí)還需指定NLS_LANG環(huán)境變量,NLS_LANG環(huán)境變量是用來控制客戶端在顯示oracle數(shù)據(jù)庫的數(shù)據(jù)時(shí)所用的字符集和本地化習(xí)慣。通常把NLS_LANG的字符集部分指定為數(shù)據(jù)庫所用的字符集則就不會(huì)存在java顯示的亂碼問題了。??
??? 對于oracle數(shù)據(jù)庫客戶端的安裝,有二種選擇,一是老實(shí)的用oracle數(shù)據(jù)庫的安裝光盤安裝對應(yīng)版本的oracle客戶端。二是下載oracle提從的即時(shí)客戶端,即時(shí)客戶端是不用安裝的,把下載包解壓即可。??
??? 要使java?web正常的通過oci驅(qū)動(dòng)訪問oracle,還需要客戶端正確的配置一下相關(guān)變量。主要如下:??
??? 對于windows系統(tǒng)并使用oracle客戶端時(shí):?
1.?把%ORACLE_HOME%lib加到PATH環(huán)境變量.?
2.?把%ORACLE_HOME%jdbclibclasses12.jar加到CLASSPATH環(huán)境變量里.也可以把classes12.jar拷貝到tomcat的commanlib目錄下。??
??? 對于windows系統(tǒng)并使用oracle的即時(shí)客戶端時(shí)(假定即時(shí)客戶端解壓在d盤):?
1.?把d:instantclient_10_2加到PATH環(huán)境變量?
2.?把d:instantclient_10_2classes12.jar加到CLASSPATH環(huán)境變量里.也可以把classes12.jar拷貝到tomcat的commanlib目錄下。?
對于linux系統(tǒng)并使用oracle客戶端時(shí):?
1.?在使用tomcat的用戶主目錄下的.bash_profile文件中加入?
exprot?ORACLE_HOME=/u01/app/oracle/product/9.2.0.4?
export?LD_LIBRARY_PATH=$ORACLE_HOME/lib?
2.?把classes12.jar拷貝到tomcat的commanlib目錄下。?
對于linux系統(tǒng)并使用oracle即時(shí)客戶端時(shí):?
1.?在使用tomcat的用戶主目錄下的.bash_profile文件中加入?
exprot?ORACLE_HOME=/instantclient_10_2?
export?LD_LIBRARY_PATH=$ORACLE_HOME/lib?
2.?把instantclient_10_2目錄下的classes12.jar拷貝到tomcat的commanlib目錄下。?
如果一個(gè)tomcat下帶了幾個(gè)應(yīng)用,且?guī)讉€(gè)應(yīng)用都要連接oracle數(shù)據(jù)庫時(shí),則要注意的時(shí),不要在每個(gè)應(yīng)用的WEB-INF/lib目錄下放入?oracle的classes12.jar/zip文件。而應(yīng)該把classes12.jar/zip文件放到tomcat的common/lib目錄下。否則會(huì)出來ojdbclib9/10庫重復(fù)加載的錯(cuò)誤。?
使用oracle即時(shí)客戶端是,本地服務(wù)名的建立可以在目錄instantclient_10_2下建立tnsnames.ora下添加連接串,如:?
SHDB?=(DESCRIPTION?=(ADDRESS_LIST?=(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?10.1.1.236)(PORT?=?1521)))?
(CONNECT_DATA?=(SERVICE_NAME?=?shdb)))