前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
Features of?Oracle?JDBC Drivers:
1.JDBC Oci 此驅動類似于傳統的ODBC 驅動。因為它需要Oracle Call Interface and Net8,所以它需要在運行使用此驅動的Java程序的機器上安裝客戶端軟件
?
2.JDBC Thin 這種驅動一般用在運行在WEB瀏覽器中的JAVA程序。它不是通過OCI or Net8,而是通過Java?sockets進行通信 ,因此不需要在使用JDBC Thin的客戶端機器上安裝客戶端軟件
?
連接Oracle數據庫提供了兩中方式OCI方式和thin方式,OCI方式是通過本地動態連接庫和Oracle進行套接字通訊,速度和安全性比較好,thin方式是通過遠程訪問Oracle。一般情況,OIC方式用于服務器端開發的數據庫連接方式而thin方式可用于applet等需要遠程訪問數據庫的方式。
?
-----------------------------------------------------------
根據oracle的說法,java程序連接oracle數據庫時,用oci驅動要比用thin驅動性能好些。主要的區別是使用thin驅動時,不需要安裝oracle的客戶端,而使用oci時則要安裝oracle的客戶端。
從使用thin驅動切換到oci驅動在配置來說很簡單,只需把連接字符串java:oracle:thin:@hostip:1521:實例名換為java:oracle:oci@本地服務名即可。如:
從jdbc:oracle:thin:@10.1.1.2:1521:shdb改成jdbc:oracle:oci8:@shdb
但這里這臺機需安裝oracle數據庫的客戶端并配置本地服務名,同時還需指定NLS_LANG環境變量,NLS_LANG環境變量是用來控制客戶端在顯示oracle數據庫的數據時所用的字符集和本地化習慣。通常把NLS_LANG的字符集部分指定為數據庫所用的字符集則就不會存在java顯示的亂碼問題了。
對于oracle數據庫客戶端的安裝,有二種選擇,一是老實的用oracle數據庫的安裝光盤安裝對應版本的oracle客戶端。二是下載oracle提從的即時客戶端,即時客戶端是不用安裝的,把下載包解壓即可。
要使java web正常的通過oci驅動訪問oracle,還需要客戶端正確的配置一下相關變量。主要如下:
對于windows系統并使用oracle客戶端時:
1. 把%ORACLE_HOME%\lib加到PATH環境變量.
2. 把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH環境變量里.也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。
對于windows系統并使用oracle的即時客戶端時(假定即時客戶端解壓在d盤):
1. 把d:\instantclient_10_2加到PATH環境變量
2. 把d:\instantclient_10_2\classes12.jar加到CLASSPATH環境變量里.也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。
對于Linux系統并使用oracle客戶端時:
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的comman\lib目錄下。
對于linux系統并使用oracle即時客戶端時:
1. 在使用tomcat的用戶主目錄下的.bash_profile文件中加入
exprot ORACLE_HOME=/instantclient_10_2
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2. 把instantclient_10_2目錄下的classes12.jar拷貝到tomcat的comman\lib目錄下。
如果一個tomcat下帶了幾個應用,且幾個應用都要連接oracle數據庫時,則要注意的時,不要在每個應用的WEB-INF/lib目錄下放入 oracle的classes12.jar/zip文件。而應該把classes12.jar/zip文件放到tomcat的common/lib目錄下。否則會出來ojdbclib9/10庫重復加載的錯誤。
使用oracle即時客戶端是,本地服務名的建立可以在目錄instantclient_10_2下建立tnsnames.ora下添加連接串,如:
SHDB =
?????(DESCRIPTION =
????????(ADDRESS_LIST =
??????????(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.236)(PORT = 1521)))
?????(CONNECT_DATA =
????????(SERVICE_NAME = shdb)
??????)
)
總結:
- 從使用上來說,oci必須在客戶機上安裝oracle客戶端或才能連接,而thin就不需要,因此從使用上來講thin還是更加方便,這也是thin比較常見的原因。
- 原理上來看,thin是純java實現tcp/ip的c/s通訊;而oci方式,客戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
- 它們分別是不同的驅動類別,oci是二類驅動, thin是四類驅動,但它們在功能上并無差異。
?
另外1)從使用上來說,oci必須在客戶機上安裝oracle客戶端或才能連接,而thin就不需要,因此從使用上來講thin還是更加方便,這也是thin比較常見的原因。?
2)原理上來看,thin是純java實現tcp/ip的c/s通訊;而oci方式,客戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
3)它們分別是不同的驅動類別,oci是二類驅動, thin是四類驅動,但它們在功能上并無差異。
4)雖然很多人說oci的速度快于thin,但找了半天沒有找到相關的測試報告。
?