摘 要:本文主要對Java連接Oracle數(shù)據(jù)庫技術(shù)進(jìn)行分析,討論通過JDBC的方法來進(jìn)行連接Oracle數(shù)據(jù)庫,如何實(shí)現(xiàn)對Oracle數(shù)據(jù)庫的訪問。
關(guān)鍵詞:Java;Oracle;JDBC 數(shù)據(jù)庫;驅(qū)動程序
中圖分類號:TP311.13
Java程序設(shè)計(jì)語言是隨著因特網(wǎng)的發(fā)展而產(chǎn)生的,也是目前被國內(nèi)外廣泛使用的程序設(shè)計(jì)語言之一。那么由于Java語言的重要性,而且社會的需求量大,就業(yè)面廣的一些特點(diǎn)。使得做Java的一些項(xiàng)目需要訪問數(shù)據(jù)庫,特別目前比較主流的軟件開發(fā)中,都涉及到訪問數(shù)據(jù)庫的問題,下面討論在Java中如何連接大型的Oracle數(shù)據(jù)庫。
1 JDBC 驅(qū)動 API
1.1 JDBC簡介。JDBC是(Java DataBase Connectivity)的縮寫,它是Java應(yīng)用程序連接和操作關(guān)系型數(shù)據(jù)庫的應(yīng)用程序接口(API)。JDBC由一組類(Class)和接口(Interface)所組成,通過調(diào)用這些類和接口所提供的方法,可以連接不同的數(shù)據(jù)庫,對數(shù)據(jù)庫下達(dá)SQL命令并取得運(yùn)行結(jié)果,并為各種不同的數(shù)據(jù)庫提供統(tǒng)一的操作方式和編程思路。
1.2 JDBC工作原理。如圖1所示,其中JDBC驅(qū)動程序管理器是JDBC體系結(jié)構(gòu)的核心,其作用是根據(jù)目標(biāo)數(shù)據(jù)沖突(包括連接方式)的不同,選擇相應(yīng)的JDBC驅(qū)動程序供當(dāng)前Java 應(yīng)用程序調(diào)用。
圖1
從圖中可以看出,JDBC起到了應(yīng)用程序與不同種類數(shù)據(jù)庫間連接橋梁的作用。因此當(dāng)Java程序員在編寫數(shù)據(jù)庫操作程序時(shí),可以只針對JDBC進(jìn)行編程,無須依賴特定的數(shù)據(jù)庫產(chǎn)品,基本達(dá)到寫一個Java應(yīng)用程序時(shí),適應(yīng)所的數(shù)據(jù)庫的目的。
2 JDBC數(shù)據(jù)庫驅(qū)動程序
驅(qū)動程序是指為計(jì)算機(jī)操作系統(tǒng)提花的訪問硬件設(shè)備的接口程序,操作系統(tǒng)通過用相應(yīng)的驅(qū)動程序來操作各種不同硬件設(shè)備,如聲卡、顯卡、網(wǎng)卡和打印機(jī)等。當(dāng)前主流數(shù)據(jù)庫產(chǎn)品發(fā)起人帶有相應(yīng)的JDBC驅(qū)動程序。通過JDBC連接可分為以下四種類型。
2.1 JDBC-ODBC橋連接模式。這類的連接是將JDBC翻譯成ODBC,然后使用一個ODBC驅(qū)動程序與數(shù)據(jù)庫進(jìn)行通信。它也是開放數(shù)數(shù)據(jù)庫互連(OBDC)是微軟件引進(jìn)的一種數(shù)據(jù)庫訪問接口技術(shù)。唯一不足的地方就是它的速度比較低。
2.2 Java到本地API模式。這類連接是將JDBC調(diào)用轉(zhuǎn)換為對本API的調(diào)用,用于與數(shù)據(jù)庫的客戶端API接口進(jìn)行通信,也屬于非直接的數(shù)據(jù)庫連接。在使用這種驅(qū)動程序之前,不僅需要安裝Java類庫,還需要安裝一些與平臺相關(guān)的代碼。這種驅(qū)動方式速度上快于第一種驅(qū)動模式。
2.3 JDBC-NET的純Java驅(qū)動程序。這種模式的驅(qū)動程序?qū)DBC調(diào)用轉(zhuǎn)換成數(shù)據(jù)庫無關(guān)的網(wǎng)絡(luò)訪問協(xié)議,利用中間件將客戶端連接到不同類型的數(shù)據(jù)庫系統(tǒng)。這種驅(qū)動程序是與平臺無關(guān)的,并且與用戶訪問的數(shù)據(jù)庫系統(tǒng)無關(guān),特別適合組建三層的應(yīng)用模型,這是最為靈活的JDBC驅(qū)動程序,單個驅(qū)動程序可以對多個數(shù)據(jù)庫進(jìn)行訪問,也屬于擴(kuò)展性較好。
2.4 本地協(xié)議的純Java驅(qū)動程序。特定的數(shù)據(jù)庫協(xié)議將JDBC請求直接發(fā)送到數(shù)據(jù)庫服務(wù)器,以實(shí)現(xiàn)程序端和數(shù)據(jù)庫間的直接通信,屬于純Java驅(qū)動程序。而且這種驅(qū)動方式是最直接,速度最快,但需要針對不同的數(shù)據(jù)庫使用不同的驅(qū)動程序。
上面不管是采用哪種方法驅(qū)動方式訪問數(shù)據(jù)庫都很類似,但是第3、4種是純Java的驅(qū)動程序,它們都具備Java 的所有優(yōu)點(diǎn),它們在性能,可移植性,功能方面都非常有優(yōu)勢。
3 通過JDCB驅(qū)動訪問Oracle數(shù)據(jù)庫
3.1 JDBC訪問數(shù)據(jù)庫步驟。從設(shè)計(jì)上來說,使用JDBC類進(jìn)行編程與使用普通的Java類沒有太大的區(qū)別:可以構(gòu)建JDBC核心類的對象,如果需要還可以繼承這些類,用于JDBC編程的類都包含在java.sql和javax.sql兩個包中。
所有的JDBC的程序的第一步都是與數(shù)據(jù)庫進(jìn)行建立連接。用戶得到一個java.sql.Connention類的對象,對于數(shù)據(jù)庫的所有操作都是基于這個對象。
一般要經(jīng)過如下步驟:(1)加載驅(qū)動程序:Class.forName(driver);(2)建立數(shù)據(jù)庫連接:Connection con=DriverManager.getConnection(url);(3)創(chuàng)建SQL語句對象:Statement stmt=con.createStatement();(4)執(zhí)行數(shù)據(jù)庫查詢語句:ResultSet rs=stmt.executeQuery(sql);(5)查詢結(jié)果處理及關(guān)閉結(jié)果集對象:rs.close();(6)關(guān)閉語句對象:stmt.close();(7)關(guān)閉連接:con.close();
JDBC的D riverManager查找到相應(yīng)的數(shù)據(jù)Driver并裝載。在程序中使用Class.forName()方法動態(tài)裝載并注冊Driver,如Class.forName(“sun.jdbc,odbc.JdbcOdbcDriver”),通過DriverManager.getConnection()與不同的數(shù)據(jù)庫建立連接。
3.2 分析連接數(shù)據(jù)庫的方法。第一步:Java連接Oracle數(shù)據(jù)庫的主要語句如下:Class.forName(“數(shù)據(jù)庫驅(qū)動類的名字”);
con=DriverManager.getConnenction(“jdbc:oracle:thin:@訪問數(shù)據(jù)庫的IP地址:Oracle端口號:MYORACL”,”username”,”password”)
第二步:通過JDBC連接Oralce數(shù)據(jù)庫。
String result=””; //查詢結(jié)果字符串
String sql=”select * from emp”; //SQL字符串
//連接字符串,格式:“jdbc:數(shù)據(jù)庫驅(qū)動名稱:連接模式:@數(shù)據(jù)庫服務(wù)器ip:端口號:數(shù)據(jù)庫SID”
String url=”jdbc:oracle:thin:@localhost:1521myoracl”;
String username=”scott”;//用戶名 String password=”admin”;//密碼
Class.foraName(“oracle驅(qū)動類的名字”).newInstance();//創(chuàng)建Oracle數(shù)據(jù)庫驅(qū)動實(shí)例
Connection conn=DriverManager.getConnection(url地址,用戶名,密碼);//獲得與數(shù)據(jù)庫的連接
第三步:下面通過上面所說的方法樣例程序如下:
try{
Class.forName(\"oracle.jdbc.driver.OracleDriver\");
Connection con=DriverManager.getConnection(\"jdbc:oracle:thin:@127.0.0.1:1521:MYORACL\",\"scott\",\"admin\");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(\"select * from emp\");
while(rs.next())
{System.out.println(\"\t\n\"+\"EMPNO:\"+rs.getString(1));
System.out.println(\"\t\n\"+\"ENAME:\"+rs.getString(2)); }
rs.close();st.close();con.close();
}catch(SQLException e) { e.printStackTrace();}
4 結(jié)束語
隨著現(xiàn)代軟件開發(fā)技術(shù)的發(fā)展,對于訪問數(shù)據(jù)庫的技術(shù)是必需,但是采用哪種方式去訪問數(shù)據(jù)比較好,特別是針對一些大型的企業(yè),公司里面尤其重要。也將是保證數(shù)據(jù)庫系統(tǒng)安全,穩(wěn)定的保障。由于軟件技術(shù)的知識不斷在更新,本人還有很多不完善和不成熟的地方,有待提高對軟件技術(shù)的研究和改進(jìn)。
參考文獻(xiàn):
[1]王薇.Java程序設(shè)計(jì)與實(shí)踐教程[M].北京:清華大學(xué)出版社.2011.
[2]許煥新.Java程序設(shè)計(jì)精講[M].北京:清華大學(xué)出版社,2010.
[3]何洪舟.Java程序中訪問Oracle數(shù)據(jù)庫的技術(shù)分析與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2007.
作者簡介:韋海清(1983.09-),女,廣西北流人,廣西師范大學(xué),學(xué)士學(xué)位,研究方向:軟件技術(shù)和計(jì)算機(jī)網(wǎng)絡(luò)。
作者單位:廣西英華國際職業(yè)學(xué)院,廣西欽州 535000