使用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連接配接。
1、JDBC OCI: oci是oracle call interface的縮寫,此驅動類似于傳統的ODBC 驅動。因為它需要Oracle Call Interface and Net8,是以它需要在運作使用此驅動的JAVA程式的機器上安裝用戶端軟體,其實主要是用到orcale用戶端裡以dll方式提供的oci和伺服器配置。
2、JDBC Thin: thin是for thin client的意思,這種驅動一般用在運作在WEB浏覽器中的JAVA程式。它不是通過OCI or Net8,而是通過Java sockets進行通信,是純java實作的驅動,是以不需要在使用JDBC Thin的用戶端機器上安裝orcale用戶端軟體,是以有很好的移植性,通常用在web開發中。
3、JDBC KPRB: 這種驅動由直接存儲在資料庫中的JAVA程式使用,如Java Stored Procedures 、triggers、Database JSP's。因為是在伺服器内部使用,他使用預設或目前的會話連接配接來訪資料庫,不需要使用者名密碼等,也不需要資料庫url。
在應用開發的時候,通常是用前面兩種方式,下面是資料庫url的寫法:
jdbc:oracle:thin:@server ip: service
jdbc:oracle:oci:@service
看來oci的還更加簡潔,ip可以省掉不寫了,這是因為oci驅動通過用戶端的native java methods來條用c library方式來通路資料庫伺服器,使用到了用戶端的net manager裡的資料庫服務配置。
因為oci方式最終與資料庫伺服器通信互動是用的c library庫,理論上性能優于thin方式,據說主要是展現在blob字段的存取上。
開發oracle經常用到的 pl sql dev使用的估計是oci方式,需要安裝用戶端,但也可以不安裝,但是要抽出其中的oci相關的dll即jar包、注冊環境變量、配置偵聽檔案等,無需安裝oracle用戶端,用plsql連接配接遠端oracle 詳細步見附注。
oracle在10g之後提供了精簡用戶端,安裝的過程應該包括上面的那些工作。
代碼示例:
package src.test;
import java.sql.*;
public class dbOCI {
public static void main1() throws SQLException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:oci:@oracle92", "scott", "tiger");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from dept");
while (rset.next())
System.out.println(rset.getString(1));
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
package src.test;
import java.sql.*;
public class dbThin {
public static void Main2() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@192.168.0.100:1521:server9i";
Connection c = DriverManager.getConnection(url, "scott", "tiger");
Statement stmt = c.createStatement();
String sql = "select * from dept";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println("dname: " + rs.getString("dname"));
}
stmt.close();
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
附注:
無需安裝oracle用戶端,用plsql連接配接遠端oracle 步驟
1、在安裝ORACLE伺服器的機器上搜尋下列檔案,
oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
sqlnet.ora
tnsnames.ora
classes12.jar
ojdbc14.jar
放到一個檔案夾,如 oraclient
2、配置tnsnames.ora,如果本機上沒有安裝oracle,
可以從安裝了oracle的機上拷貝一個(tnsnames.ora檔案在%ORACLE_HOME%/network/admin下)放在上面的目錄D:/oraclient下。
oracledata =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracledata)
)
)
3、添加一個環境變量,名為TNS_ADMIN,值為tnsnames.ora檔案所在路徑(如:D:/oraclient,特别是重裝後或其它操作,忘了TNS_ADMIN變量,plsql登陸就會報無法解析指定的連接配接辨別符),這是為了能夠找到上面說的tnsnames.ora。如果本機上安裝了ORACLE,并且設定了ORACLE_HOME環境變量,那麼會自動在%ORACLE_HOME%/network/admin/位置查找tnsnames.ora檔案。
4、設定ORACLE的語言,添加環境變量:
“NLS_LANG = SIMPLIFIEDCHINESE_CHINA.ZHS16GBK”,(AMERICAN_AMERICA.US7ASCII 是ASCII編碼類型,其它類型可自己到伺服器看一下或網上查找一下)