JDBC介面技術(轉)

subid發表於2007-08-12
JDBC介面技術[@more@]  作者:鄭林峰 張公忠
  
   JDBC是一種可用於執行SQL語句的JavaAPI(ApplicationProgrammingInterface應用程式設計介面)。它由一些Java語言編寫的類和介面組成。JDBC為資料庫應用開發人員、資料庫前臺工具開發人員提供了一種標準的應用程式設計介面,使開發人員可以用純Java語言編寫完整的資料庫應用程式。

一、ODBC到JDBC的發展歷程

說到JDBC,很容易讓人聯想到另一個十分熟悉的字眼“ODBC”。它們之間有沒有聯絡呢?如果有,那麼它們之間又是怎樣的關係呢?

ODBC是OpenDatabaseConnectivity的英文簡寫。它是一種用來在相關或不相關的資料庫管理系統(DBMS)中存取資料的,用C語言實現的,標準應用程式資料介面。透過ODBCAPI,應用程式可以存取儲存在多種不同資料庫管理系統(DBMS)中的資料,而不論每個DBMS使用了何種資料儲存格式和程式設計介面。

1.ODBC的結構模型

ODBC的結構包括四個主要部分:應用程式介面、驅動器管理器、資料庫驅動器和資料來源。

應用程式介面:遮蔽不同的ODBC資料庫驅動器之間函式呼叫的差別,為使用者提供統一的SQL程式設計介面。

驅動器管理器:為應用程式裝載資料庫驅動器。

資料庫驅動器:實現ODBC的函式呼叫,提供對特定資料來源的SQL請求。如果需要,資料庫驅動器將修改應用程式的請求,使得請求符合相關的DBMS所支援的文法。

資料來源:由使用者想要存取的資料以及與它相關的作業系統、DBMS和用於訪問DBMS的網路平臺組成。

雖然ODBC驅動器管理器的主要目的是載入資料庫驅動器,以便ODBC函式呼叫,但是資料庫驅動器本身也執行ODBC函式呼叫,並與資料庫相互配合。因此當應用系統發出呼叫與資料來源進行連線時,資料庫驅動器能管理通訊協議。當建立起與資料來源的連線時,資料庫驅動器便能處理應用系統向DBMS發出的請求,對分析或發自資料來源的設計進行必要的翻譯,並將結果返回給應用系統。

2.JDBC的誕生

自從Java語言於1995年5月正式公佈以來,Java風靡全球。出現大量的用java語言編寫的程式,其中也包括資料庫應用程式。由於沒有一個Java語言的API,程式設計人員不得不在Java程式中加入C語言的ODBC函式呼叫。這就使很多Java的優秀特性無法充分發揮,比如平臺無關性、物件導向特性等。隨著越來越多的程式設計人員對Java語言的日益喜愛,越來越多的公司在Java程式開發上投入的精力日益增加,對java語言介面的訪問資料庫的API的要求越來越強烈。也由於ODBC的有其不足之處,比如它並不容易使用,沒有物件導向的特性等等,SUN公司決定開發一Java語言為介面的資料庫應用程式開發介面。在JDK1.x版本中,JDBC只是一個可選部件,到了JDK1.1公佈時,SQL類包(也就是JDBCAPI)就成為Java語言的標準部件。

二、JDBC技術概述

JDBC是一種可用於執行SQL語句的JavaAPI(ApplicationProgrammingInterface,應用程式設計介面)。它由一些Java語言寫的類、介面組成。JDBC給資料庫應用開發人員、資料庫前臺工具開發人員提供了一種標準的應用程式設計介面,使開發人員可以用純Java語言編寫完整的資料庫應用程式。

透過使用JDBC,開發人員可以很方便地將SQL語句傳送給幾乎任何一種資料庫。也就是說,開發人員可以不必寫一個程式訪問Sybase,寫另一個程式訪問Oracle,再寫一個程式訪問Microsoft的SQLServer。用JDBC寫的程式能夠自動地將SQL語句傳送給相應的資料庫管理系統(DBMS)。不但如此,使用Java編寫的應用程式可以在任何支援Java的平臺上執行,不必在不同的平臺上編寫不同的應用。Java和JDBC的結合可以讓開發人員在開發資料庫應用時真正實現“WriteOnce,RunEverywhere!”

Java具有健壯、安全、易用等特性,而且支援自動網上下載,本質上是一種很好的資料庫應用的程式語言。它所需要的是Java應用如何同各種各樣的資料庫連線,JDBC正是實現這種連線的關鍵。

JDBC擴充套件了Java的能力,如使用Java和JDBCAPI就可以公佈一個Web頁,頁中帶有能訪問遠端資料庫的Ap?plet。或者企業可以透過JDBC讓全部的職工(他們可以使用不同的作業系統,如Windwos,Machintosh和UNIX)在In?tranet上連線到幾個全球資料庫上,而這幾個全球資料庫可以是不相同的。隨著越來越多的程式開發人員使用Java語言,對Java訪問資料庫易操作性的需求越來越強烈。

MIS管理人員喜歡Java和JDBC,因為這樣可以更容易經濟地公佈資訊。各種已經安裝在資料庫中的事務處理都將繼續正常執行,甚至這些事務處理是儲存在不同的資料庫管理系統中;而對新的資料庫應用來說,開發時間將縮短,安裝和版本升級將大大簡化。程式設計師可以編寫或改寫一個程式,然後將它放在伺服器上,而每個使用者都可以訪問伺服器得到最新的版本。對於資訊服務行業,Java和JDBC提供了一種很好的向外界使用者更新資訊的方法。

1.JDBC的任務

簡單地說,JDBC能完成下列三件事:

1)同一個資料庫建立連線;

2)向資料庫傳送SQL語句;

3)處理資料庫返回的結果。

2.JDBC—一種底層的API

JDBC是一種底層API,這意味著它將直接呼叫SQL命令。JDBC完全勝任這個任務,而且比其他資料庫互聯更加容易實現。同時它也是構造高層API和資料庫開發工具的基礎。高層API和資料庫開發工具應該是使用者介面更加友好,使用更加方便,更易於理解的。但所有這樣的API將最終被翻譯為象JDBC這樣的底層API。目前兩種基於JDBC的高層API正處在開發階段。

1)SQL語言嵌入Java的前處理器。雖然DBMS已經實現了SQL查詢,但JDBC要求SQL語句被當作字串引數傳送給Java程式。而嵌入式SQL前處理器允許程式設計師將SQL語句混用:Java變數可以在SQL語句中使用,來接收或提供數值。然後SQL的前處理器將把這種Java/SQL混用的程式翻譯成帶有JDBCAPI的Java程式。

2)實現從關聯式資料庫到Java類的直接對映。Javasoft和其他公司已經宣佈要實現這一技術。在這種“物件/關係”對映中,表的每一行都將變成這類的一個例項,每一列的值對應例項的一個屬性。程式設計師可以直接操作Java的物件;而存取所需要的SQL呼叫將在內部直接產生。還可以實現更加複雜的對映,比如多張表的行在一個Java的類中實現。

隨著大家對JDBC興趣的不斷濃厚,越來越多的開發人員已經開始利用JDBC為基礎的工具進行開發。這使開發工作變得容易。同時,程式設計師也正在開發對終端使用者來說訪問資料庫更加容易的應用程式。

3.JDBC和ODBC及其他API的比較

到目前為止,微軟的ODBC可能是用得最廣泛的訪問關聯式資料庫的API。它提供了連線幾乎任何一種平臺、任何一種資料庫的能力。那麼,為什麼不直接從Java中直接使用ODBC呢?

回答是可以從Java中使用ODBC,但最好在JDBC的協助下,用JDBC-ODBC橋接器實現。那麼,為什麼需要JDBC呢?要回答這個問題,有這麼幾個方面:

1)ODBC並不適合在Java中直接使用。ODBC是一個C語言實現的API,從Java程式呼叫本地的C程式會帶來一系列類似安全性、完整性、健壯性的缺點。

2)其次,完全精確地實現從C程式碼ODBC到JavaAPI寫的ODBC的翻譯也並不令人滿意。比如,Java沒有指標,而ODBC中大量地使用了指標,包括極易出錯的空指標“void*”。因此,對Java程式設計師來說,把JDBC設想成將ODBC轉換成物件導向的API是很自然的。

3)ODBC並不容易學習,它將簡單特性和複雜特性混雜在一起,甚至對非常簡單的查詢都有複雜的選項。而JDBC剛好相反,它保持了簡單事物的簡單性,但又允許複雜的特性。

4)JDBC這樣的JavaAPI對於純Java方案來說是必須的。當使用ODBC時,人們必須在每一臺客戶機上安裝ODBC驅動器和驅動管理器。如果JDBC驅動器是完全用Java語言實現的話,那麼JDBC的程式碼就可以自動的下載和安裝,並保證其安全性,而且,這將適應任何Java平臺,從網路計算機NC到大型主機Mainframe。

總而言之,JDBCAPI是能體現SQL最基本抽象概念的、最直接的Java介面。它建構在ODBC的基礎上,因此,熟悉ODBC的程式設計師將發現學習JDBC非常容易。JDBC保持了ODBC的基本設計特徵。實際上,這兩種介面都是基於X/OPENSQL的呼叫級介面(CLI)。它們的最大的不同是JDBC是基於Java的風格和優點,並強化了Java的風格和優點。

最近,微軟又推出了除了ODBC以外的新的API,如RDO,ADO和OLEDB。這些API事實上在很多方面上同JDBC一樣朝著相同的方向努力,也就是努力成為一個物件導向的,基於ODBC的類介面。然而,這些介面目前並不能代替ODBC,尤其在ODBC驅動器已經在市場完全形成的時候,更重要的是它們只是ODBC的“漂亮的包裝”。

4.JDBC兩層模型和三層模型

JDBC支援兩層模型,也支援三層模型訪問資料庫。

如圖3所示,兩層模型中,一個java Appple或者一個JA-va應用直接同資料庫連線。這就需要能直接被訪問的資料庫進行連線的JDBC驅動器。使用者的SQL語句被傳送給資料庫,而這些語句執行的結果將被傳回給使用者。資料庫可以在同一機器上,也可以另一機器上透過網路進行連線。這被稱為“Client/Server”結構,使用者的計算機作為Client,執行資料庫的計算機作為Server。這個網路可是intranet,比如連線全體僱員的企業內部網,當然也可以是internet。

如圖4所示,在三層模型中,命令將被髮送到服務的“中間層”,而“中間層”將SQL語句傳送到資料庫。資料庫處理SQL語句並將結果返回“中間層”,然後“中間層”將它們 返回使用者。MIS管理員將發現三層模型很有吸引力,因為“中間層”可以進行對訪問的控制並協同資料庫的更新,另一個優勢就是如果有一個“中間層”使用者就可以使用一個易用的高層的API,這個API可以由“中間層”進行轉換,轉換成底層的呼叫。而且,在許多情況下,三層模型可以提供更好的效能。

到目前為止,“中間層”通常還是用C或C++實現,以保證其高效能。但隨著最佳化編譯器的引入,將java的位元組碼轉換成高效的機器碼,用java來實現“中間層”將越來越實際。而JDBC是允許從一個java“中間層”訪問資料庫的關鍵。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-952526/,如需轉載,請註明出處,否則將追究法律責任。

相關文章