四種JDBC驅(qū)動(dòng)類型介紹(轉(zhuǎn))
關(guān)于jdbc所說(shuō)的""1,2,3,4"" 實(shí)際上是指jdbc驅(qū)動(dòng)的四種類型.本文將對(duì)jdbc driver 的四種類型以及不同類型的driver適合于哪種層次的應(yīng)用做一個(gè)簡(jiǎn)單介紹, 如果你現(xiàn)在正準(zhǔn)備開發(fā)有關(guān)數(shù)據(jù)庫(kù)的java應(yīng)用,你也許會(huì)需要從網(wǎng)上下載相關(guān)數(shù)據(jù)庫(kù)的jdbc driver .在下載網(wǎng)頁(yè)上你可能會(huì)發(fā)現(xiàn)這樣的說(shuō)明""this is a type 4 drvier""或this is type 3 driver那么到底應(yīng)該下載哪一個(gè),下載后的driver是否適合我們要開發(fā)的應(yīng)用呢?還是讓我們先解釋 一下這四種類型的具體含義吧。
type 1:jdbc-odbc橋
type 2:本地api驅(qū)動(dòng)
type 3:網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)
type 4:本地協(xié)議驅(qū)動(dòng)
Type 1: jdbc-odbc橋
Jdbc-odbc 橋 是sun公司提供的,是jdk提供的的標(biāo)準(zhǔn)api. 這種類型的驅(qū)動(dòng)實(shí)際是把所有jdbc的調(diào)用傳遞給odbc ,再由odbc調(diào)用本地?cái)?shù)據(jù)庫(kù)驅(qū)動(dòng)代碼.( 本地?cái)?shù)據(jù)庫(kù)驅(qū)動(dòng)代碼是指由數(shù)據(jù)庫(kù)廠商提供的數(shù)據(jù)庫(kù)操作二進(jìn)制代碼庫(kù),例如在oracle for windows中就是oci dll 文件)
jdbc-odbc橋
|
odbc
|
廠商DB代碼---------------數(shù)據(jù)庫(kù)Server
(圖一)
只要本地機(jī)裝有相關(guān)的odbc驅(qū)動(dòng)那么采用jdbc-odbc橋幾乎可以訪問(wèn)所有的數(shù)據(jù)庫(kù),jdbc-odbc方法對(duì)于客戶端已經(jīng)具備odbc driver的應(yīng)用還是可行的.但是,由于jdbc-odbc先調(diào)用odbc再由odbc去調(diào)用本地?cái)?shù)據(jù)庫(kù)接口訪問(wèn)數(shù)據(jù)庫(kù).所以,執(zhí)行效率比較低,對(duì)于那些大數(shù)據(jù)量存取的應(yīng)用是不適合的.而且,這種方法要求客戶端必須安裝odbc 驅(qū)動(dòng),所以對(duì)于基于internet ,intranet的應(yīng)用也是不合適的.因?yàn)?你不可能要求所有客戶都能找到odbc driver.
Type 2: 本地Api驅(qū)動(dòng)
本地api驅(qū)動(dòng)直接把jdbc調(diào)用轉(zhuǎn)變?yōu)閿?shù)據(jù)庫(kù)的標(biāo)準(zhǔn)調(diào)用再去訪問(wèn)數(shù)據(jù)庫(kù).這種方法需要本地?cái)?shù)據(jù)庫(kù)驅(qū)動(dòng)代碼.
本地api驅(qū)動(dòng)
|
廠商DB代碼---------------數(shù)據(jù)庫(kù)Server
(圖二)
這種驅(qū)動(dòng)比起jdbc-odbc橋執(zhí)行效率大大提高了.但是,它仍然需要在客戶端加載數(shù)據(jù)庫(kù)廠商提供的代碼庫(kù).這樣就不適合基于internet的應(yīng)用.并且,他的執(zhí)行效率比起3,4型的jdbc驅(qū)動(dòng)還是不夠高.
Type3:網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)
這種驅(qū)動(dòng)實(shí)際上是根據(jù)我們熟悉的三層結(jié)構(gòu)建立的. jdbc先把對(duì)數(shù)局庫(kù)的訪問(wèn)請(qǐng)求傳遞給網(wǎng)絡(luò)上的中間件服務(wù)器. 中間件服務(wù)器再把請(qǐng)求翻譯為符合數(shù)據(jù)庫(kù)規(guī)范的調(diào)用,再把這種調(diào)用傳給數(shù)據(jù)庫(kù)服務(wù)器.如果中間件服務(wù)器也是用java開法的,那么在在中間層也可以使用1,2型jdbc驅(qū)動(dòng)程序作為訪問(wèn)數(shù)據(jù)庫(kù)的方法.
網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)---------中間件服務(wù)器------------數(shù)據(jù)庫(kù)Server
( 圖三)
由于這種驅(qū)動(dòng)是基于server的.所以,它不需要在客戶端加載數(shù)據(jù)庫(kù)廠商提供的代碼庫(kù).而且他在執(zhí)行效率和可升級(jí)性方面是比較好的.因?yàn)榇蟛糠止δ軐?shí)現(xiàn)都在server端,所以這種驅(qū)動(dòng)可以設(shè)計(jì)的很小,可以非??焖俚募虞d到內(nèi)存中. 但是,這種驅(qū)動(dòng)在中間件層仍然需要有配置其它數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,并且由于多了一個(gè)中間層傳遞數(shù)據(jù),它的執(zhí)行效率還不是最好.
Type4 本地協(xié)議驅(qū)動(dòng)
這種驅(qū)動(dòng)直接把jdbc調(diào)用轉(zhuǎn)換為符合相關(guān)數(shù)據(jù)庫(kù)系統(tǒng)規(guī)范的請(qǐng)求.由于4型驅(qū)動(dòng)寫的應(yīng)用可以直接和數(shù)據(jù)庫(kù)服務(wù)器通訊.這種類型的驅(qū)動(dòng)完全由java實(shí)現(xiàn),因此實(shí)現(xiàn)了平臺(tái)獨(dú)立性.
本地協(xié)議驅(qū)動(dòng)---------數(shù)據(jù)庫(kù)Server
( 圖四)
由于這種驅(qū)動(dòng)不需要先把jdbc的調(diào)用傳給odbc或本地?cái)?shù)據(jù)庫(kù)接口或者是中間層服務(wù)器.所以它的執(zhí)行效率是非常高的.而且,它根本不需要在客戶端或服務(wù)器端裝載任何的軟件或驅(qū)動(dòng).這種驅(qū)動(dòng)程序可以動(dòng)態(tài)的被下載.但是對(duì)于不同的數(shù)據(jù)庫(kù)需要下載不同的驅(qū)動(dòng)程序.
以上對(duì)四種類型的jdbc驅(qū)動(dòng)做了一個(gè)說(shuō)明.那么它們適合那種類型的應(yīng)用開發(fā)呢?Jdbc-odbc橋由于它的執(zhí)行效率不高,更適合做為開發(fā)應(yīng)用時(shí)的一種過(guò)度方案,或著對(duì)于初學(xué)者了解jdbc編程也較適用.
對(duì)于那些需要大數(shù)據(jù)量操作的應(yīng)用程序則應(yīng)該考慮2,3,4型驅(qū)動(dòng).在intranet方面的應(yīng)用可以考慮2型驅(qū)動(dòng),但是由于3,4型驅(qū)動(dòng)在執(zhí)行效率上比2型驅(qū)動(dòng)有著明顯的優(yōu)勢(shì),而且目前開發(fā)的趨勢(shì)是使用純java.所以3,4型驅(qū)動(dòng)也可以作為考慮對(duì)象.
至于基于internet方面的應(yīng)用就只有考慮3,4型驅(qū)動(dòng)了. 因?yàn)?型驅(qū)動(dòng)可以把多種數(shù)據(jù)庫(kù)驅(qū)動(dòng)都配置在中間層服務(wù)器.所以3型驅(qū)動(dòng)最適合那種需要同時(shí)連接多個(gè)不同種類的數(shù)據(jù)庫(kù),并且對(duì)并發(fā)連接要求高的應(yīng)用. 4型驅(qū)動(dòng)則適合那些連接單一數(shù)據(jù)庫(kù)的工作組應(yīng)用.
說(shuō)了這么多,那么相關(guān)的jdbc驅(qū)動(dòng)應(yīng)該在哪里下載呢?實(shí)際上各大數(shù)據(jù)庫(kù)廠商(oracle,sybase,db2)對(duì)jdbc多都有很好的支持(微軟例外).你可以到他們的官方站點(diǎn)去下載.由于微軟一直沒有開發(fā)sqlserver的jdbc驅(qū)動(dòng),所以只好用其他廠商提供的驅(qū)動(dòng).這里向大家推薦幾個(gè)站點(diǎn)
http://www.idssoftware.com/jdbcdrv.html (3型)
http://www.jturbo.com/ (4型)
http://www.inetsoftware.de/(4型)
特別推薦I-net Sprinta 2000 的sqlserver驅(qū)動(dòng),因?yàn)樗尿?qū)動(dòng)只有47K沒有時(shí)間限制,并且是4型驅(qū)動(dòng).
對(duì)于在編程時(shí)如何用JDBC建立連接,本文就不做詳細(xì)介紹了.讀者可以在jdk中找到例子,目錄為jdk/demo/jfc/dbdemos. 如果你下載其他廠商的驅(qū)動(dòng)程序在壓縮文件中會(huì)有例子.如果你在applet中調(diào)用jdbc驅(qū)動(dòng)訪問(wèn)數(shù)據(jù)庫(kù)一定要注意web server和 數(shù)據(jù)庫(kù) server一定要在同一臺(tái)機(jī)器.這是java applet 安全規(guī)范所要求的.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2142387
posted on 2008-04-15 17:04 liujg 閱讀(547) 評(píng)論(0) 編輯 收藏 所屬分類: JDBC