Java數(shù)據(jù)庫(kù)互連(數(shù)據(jù)庫(kù))
時(shí)間:2022-12-26 20:30:02 | 來(lái)源:信息時(shí)代
時(shí)間:2022-12-26 20:30:02 來(lái)源:信息時(shí)代
Java數(shù)據(jù)庫(kù)互連 : 一種基于X/Open SQL調(diào)用級(jí)接口的規(guī)范,用于Java語(yǔ)言開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用的標(biāo)準(zhǔn)編程接口。它給出一系列Java對(duì)象的規(guī)格定義,這些對(duì)象被劃分到Java.sql和Javax.sql兩個(gè)包。Java應(yīng)用代碼通過(guò)JDBC可以訪問(wèn)數(shù)據(jù)庫(kù)、提交SQL語(yǔ)句和接收結(jié)果等。它以面向?qū)ο蟮姆椒▉?lái)制定規(guī)范以簡(jiǎn)化應(yīng)用編程,比如在這些對(duì)象上可以用抽象、繼承、多態(tài)等面向?qū)ο蟮幕炯夹g(shù)提高開(kāi)發(fā)效率和質(zhì)量。
JDBC接口對(duì)象仍然面向關(guān)系型數(shù)據(jù)庫(kù)。和ODBC執(zhí)行方法類(lèi)似,JDBC提供不同的語(yǔ)句類(lèi)來(lái)支持不同的交互執(zhí)行模型:
(1) Statement類(lèi): 每次向服務(wù)器發(fā)送一個(gè)SQL語(yǔ)句并執(zhí)行。
(2) PreparedStatement類(lèi):在服務(wù)器緩存語(yǔ)句的執(zhí)行計(jì)劃,然后可以多次執(zhí)行。
(3) CallableStatement類(lèi):執(zhí)行數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。
JDBC基于SQL-92進(jìn)行設(shè)計(jì)。從3.0版起,逐步提供SQL-99標(biāo)準(zhǔn)中已被數(shù)據(jù)庫(kù)產(chǎn)品所廣泛支持的特性。JDBC驅(qū)動(dòng)程序可以通過(guò)元數(shù)據(jù)接口類(lèi)DatabaseMetadata報(bào)告它所支持的特性。
JDBC由Sun公司制定和發(fā)布,最早是在1997年作為J2SE開(kāi)發(fā)工具包的一部分。后又發(fā)布了1.1、1.2、2.0、2.1、3.0,目前流行的是2.0和3.0規(guī)范。3.0版包括了此前各個(gè)版本的接口類(lèi),4.0版本也于2006年發(fā)布。
1. JDBC的基本結(jié)構(gòu)
使用JDBC訪問(wèn)數(shù)據(jù)庫(kù)需要四個(gè)主要組件:Java應(yīng)用程序、JDBC驅(qū)動(dòng)程序管理器、JDBC驅(qū)動(dòng)程序和數(shù)據(jù)源(見(jiàn)圖1)。
圖1 基于JDBC訪問(wèn)數(shù)據(jù)庫(kù)
(1) Java應(yīng)用程序: Java應(yīng)用程序具有高度可移植性,幾乎能夠運(yùn)行在任何安裝了Java虛擬機(jī)的平臺(tái)上,它訪問(wèn)數(shù)據(jù)源需要通過(guò)JDBC驅(qū)動(dòng)程序。
(2) JDBC驅(qū)動(dòng)程序管理器:驅(qū)動(dòng)程序管理器加載和管理驅(qū)動(dòng)程序。建立連接時(shí),它根據(jù)連接用的URL能夠確定該URL的驅(qū)動(dòng)程序并創(chuàng)建連接對(duì)象,然后對(duì)應(yīng)用程序和驅(qū)動(dòng)程序之間的交互進(jìn)行其他控制。
(3)JDBC驅(qū)動(dòng)程序: JDBC驅(qū)動(dòng)程序是Java虛擬機(jī)上可動(dòng)態(tài)加載的程序,數(shù)據(jù)庫(kù)開(kāi)發(fā)商提供的驅(qū)動(dòng)程序是JDBC抽象類(lèi)的實(shí)現(xiàn)。JDBC驅(qū)動(dòng)程序有四種: ①JDBC-ODBC橋+ODBC驅(qū)動(dòng)程序: 橋處理包和ODBC驅(qū)動(dòng)程序必須在每個(gè)客戶端機(jī)器上,應(yīng)用對(duì)JDBC接口方法的調(diào)用由橋處理包轉(zhuǎn)換為ODBC接口調(diào)用,然后經(jīng)ODBC驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)源。這是一種本地的解決方案,不是跨平臺(tái)方案。它不需要額外的JDBC驅(qū)動(dòng)程序,但需要相關(guān)的ODBC驅(qū)動(dòng)程序管理器、ODBC驅(qū)動(dòng)程序并添加相應(yīng)的數(shù)據(jù)源。②Java驅(qū)動(dòng)程序+本地API:是代替JDBC-ODBC橋和ODBC驅(qū)動(dòng)程序的另一種本地化解決方案。驅(qū)動(dòng)程序中的Java代碼調(diào)用具體數(shù)據(jù)庫(kù)供應(yīng)商提供的本地C/C++的API函數(shù)庫(kù),將JDBC調(diào)用轉(zhuǎn)換為CLI調(diào)用直接訪問(wèn)數(shù)據(jù)源,完成交互操作。③JDBC-網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序: 該類(lèi)驅(qū)動(dòng)程序支持通用的網(wǎng)絡(luò)API,它將應(yīng)用中的JDBC調(diào)用翻譯成網(wǎng)絡(luò)API調(diào)用序列后傳輸?shù)綌?shù)據(jù)庫(kù)中間件,再由中間件訪問(wèn)指定數(shù)據(jù)源,完成調(diào)用請(qǐng)求。數(shù)據(jù)庫(kù)中間件可以連接多種數(shù)據(jù)庫(kù),具有很強(qiáng)的可伸縮性。因此,應(yīng)用客戶端就能夠訪問(wèn)多種數(shù)據(jù)庫(kù),但要求中間件能夠訪問(wèn)應(yīng)用所需的數(shù)據(jù)源。④本地協(xié)議Java驅(qū)動(dòng)程序: 純Java實(shí)現(xiàn)的驅(qū)動(dòng)程序中內(nèi)置訪問(wèn)數(shù)據(jù)源的接口,JDBC方法直接訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行調(diào)用。這種方法具有Java的平臺(tái)無(wú)關(guān)性,但需要各廠商提供獨(dú)立的驅(qū)動(dòng)程序。
(4)JDBC數(shù)據(jù)源: 由于存在多種類(lèi)型的JDBC驅(qū)動(dòng)程序,JDBC的數(shù)據(jù)源可以分為傳統(tǒng)的ODBC數(shù)據(jù)源和其他數(shù)據(jù)源。傳統(tǒng)的ODBC數(shù)據(jù)源需要通過(guò)ODBC管理器管理,而其他數(shù)據(jù)源則由具體的JDBC驅(qū)動(dòng)程序直接訪問(wèn),不需要注冊(cè)到應(yīng)用主機(jī)。通過(guò)JDBC訪問(wèn)任何數(shù)據(jù)源都統(tǒng)一使用URL指定數(shù)據(jù)源,驅(qū)動(dòng)程序根據(jù)URL建立必要的連接,因此應(yīng)用程序設(shè)定正確的URL即可完成指定。
2. 工作流程
基于JDBC的應(yīng)用程序的工作流程主要有三步:與某一數(shù)據(jù)庫(kù)建立連接;向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,操縱數(shù)據(jù);最后取得處理結(jié)果。細(xì)化步驟如下:
(1)通過(guò)驅(qū)動(dòng)程序管理器建立到數(shù)據(jù)源的連接對(duì)象。
(2)建立連接上的語(yǔ)句對(duì)象或其子類(lèi)對(duì)象。
(3)如果需要,設(shè)定語(yǔ)句對(duì)象使用的位置參數(shù)。
(4)執(zhí)行語(yǔ)句對(duì)象關(guān)聯(lián)的查詢。
(5)查看執(zhí)行狀態(tài),處理返回的結(jié)果集。
(6)關(guān)閉語(yǔ)句對(duì)象和查詢間的關(guān)聯(lián)。
(7)處理其他的語(yǔ)句對(duì)象。
(8)提交或回滾連接上的事務(wù),關(guān)閉連接。
連接對(duì)象是Java應(yīng)用程序與數(shù)據(jù)庫(kù)服務(wù)器通信的控制對(duì)象,應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)前必須獲取至少一個(gè)數(shù)據(jù)庫(kù)連接。連接對(duì)象最終由Java.sql.Connection接口類(lèi)創(chuàng)建,可以設(shè)置連接選項(xiàng)、管理事務(wù)和創(chuàng)建語(yǔ)句對(duì)象等。
JDBC是面向?qū)ο蟮尿?qū)動(dòng)程序,函數(shù)可以重載,因此多數(shù)接口函數(shù)有若干個(gè)實(shí)現(xiàn),例如,getInt0檢索列值時(shí)可以用列序號(hào),也可以用列名。
3. JDBC特點(diǎn)
JDBC接口對(duì)象的方法與ODBC API很相似,利于用戶理解。方法更為簡(jiǎn)單,編程人員可以從復(fù)雜的驅(qū)動(dòng)程序調(diào)用命令和函數(shù)中解脫出來(lái),更致力于應(yīng)用程序中的關(guān)鍵地方。JDBC提高了程序的可移植性。
JDBC的主要缺點(diǎn)在于:受Java虛擬機(jī)的限制,訪問(wèn)數(shù)據(jù)的速度會(huì)受一定的影響。另外JDBC結(jié)構(gòu)中也包含具體產(chǎn)品的實(shí)現(xiàn)規(guī)定,如連接URL不完全統(tǒng)一。