郭敏
摘 要:介紹了應(yīng)用程序通過ODBC訪問各種數(shù)據(jù)源的核心技術(shù),研究了ODBC的結(jié)構(gòu),討論了ODBC技術(shù)和OLE DB和ADO技術(shù)關(guān)系,JAVA訪問數(shù)據(jù)庫的JDBC技術(shù)。
關(guān)鍵詞:ODBC;數(shù)據(jù)源;OLD DB;ADO JDBC
數(shù)據(jù)庫技術(shù)無處不在,從最初的報(bào)表統(tǒng)計(jì)數(shù)據(jù)到現(xiàn)在的動態(tài)網(wǎng)頁、多數(shù)據(jù)源的程序設(shè)計(jì)都有數(shù)據(jù)庫技術(shù)的影子。隨著科學(xué)技術(shù)的發(fā)展,數(shù)據(jù)庫技術(shù)自身也在不斷地發(fā)展,逐漸形成了多種成熟的數(shù)據(jù)格式,主要有:SQL Server、Access、dBase、FoxPro、Excel、Oracle以及Microsoft Text。面對這么多的數(shù)據(jù)庫格式,它們內(nèi)部結(jié)構(gòu)都分別不一樣,自然各自的訪問方式也都不一樣。現(xiàn)在,程序員不需要分別開發(fā)面向不同數(shù)據(jù)庫格式的程序,因?yàn)镺DBC技術(shù)已為我們作好了這方面的準(zhǔn)備工作。
一、什么是ODBC
ODBC(Open Database Connectivity) 是”開放數(shù)據(jù)庫互連”的簡稱,是一種使用SQL的應(yīng)用程序接口(API),是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。
一個(gè)基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由對應(yīng)的DBMS的ODBC驅(qū)動程序完成。也就是說,不論是FoxPro、Access還是Oracle數(shù)據(jù)庫,均可用ODBC API進(jìn)行訪問。由此可見,ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫,用它生成的程序與數(shù)據(jù)庫或數(shù)據(jù)庫引擎是無關(guān)的。ODBC可使程序員方便地編寫訪問各DBMS廠商的數(shù)據(jù)庫的應(yīng)用程序,而不需了解其產(chǎn)品的細(xì)節(jié)。
二、ODBC的結(jié)構(gòu)
一個(gè)完整的ODBC如圖1所示。
1. 應(yīng)用程序。對外提供使用者交談界面,對內(nèi)執(zhí)行資料之準(zhǔn)備工作數(shù)據(jù)庫系統(tǒng)所傳回來的結(jié)果在顯示給使用者看,它可以用支持ODBC技術(shù)的任何一門語言編寫。
2.驅(qū)動程序管理器(Driver Manager)。ODBC管理器位于Windows控制面板(Control Panel)的32位ODBC內(nèi),包含在ODBC32.DLL中,它對用戶是透明的。其任務(wù)是管理ODBC驅(qū)動程序,是ODBC中最重要的部件。提供從主機(jī)語言到特定后端數(shù)據(jù)源驅(qū)動程序的接口。
3. ODBC API。數(shù)據(jù)庫廠商為程序設(shè)計(jì)者提供的直接訪問數(shù)據(jù)庫的一組函數(shù)。
4. ODBC 驅(qū)動程序。也是一個(gè)動態(tài)鏈接庫 (DLL)。應(yīng)用程序通過調(diào)用驅(qū)動程序所支持的函數(shù)來操縱具體的數(shù)據(jù)源。
5. 數(shù)據(jù)源。作為數(shù)據(jù)源使用的數(shù)據(jù)庫或數(shù)據(jù)庫服務(wù)器。ODBC數(shù)據(jù)源通過它們的數(shù)據(jù)源名稱來引用,或者通過具體引用ODBC驅(qū)動程序和服務(wù)器名稱來引用。可以在 Windows 的控制面板中使用ODBC管理程序或rdoRegisterDataSource (一個(gè)ODBC API)方法來注冊命名的數(shù)據(jù)源。
應(yīng)用程序要訪問一個(gè)數(shù)據(jù)庫,首先必須用ODBC管理器注冊一個(gè)數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動程序等信息,建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。
Windows的控制面板中數(shù)據(jù)源管理器如圖2所示,用啟單擊“添加”按紐就可以添加不同格式的數(shù)據(jù)源,圖2中已添加了四種不同類型的數(shù)據(jù)源。
在ODBC中,ODBC API不能直接訪問數(shù)據(jù)庫,必須通過驅(qū)動程序管理器與數(shù)據(jù)庫交換信息。驅(qū)動程序管理器負(fù)責(zé)將應(yīng)用程序?qū)DBC API的調(diào)用傳遞給正確的驅(qū)動程序,而驅(qū)動程序在執(zhí)行完相應(yīng)的操作后,將結(jié)果通過驅(qū)動程序管理器返回給應(yīng)用程序。
在訪問ODBC數(shù)據(jù)源時(shí)需要ODBC驅(qū)動程序的支持。ODBC是為調(diào)用關(guān)系數(shù)據(jù)庫提供統(tǒng)一途徑的一類API。
三、ODBC的發(fā)展
1. OLE DB。隨著數(shù)據(jù)源的日益多樣化,現(xiàn)今的應(yīng)用程序很可能需要從不同的數(shù)據(jù)源取得數(shù)據(jù),加以處理,再把處理過的數(shù)據(jù)輸出到另外一個(gè)數(shù)據(jù)源中。更麻煩的是這些數(shù)據(jù)源可能不是傳統(tǒng)的關(guān)系數(shù)據(jù)庫,而可能是非關(guān)系型信息源,例如Email,文件系統(tǒng)存儲,文本、圖形和地理數(shù)據(jù)以及自定義業(yè)務(wù)對象。Microsoft為了讓應(yīng)用程序能夠以統(tǒng)一的方式存取各種不同的數(shù)據(jù)源,在1997年提出了UniversalDataAccess(UDA)架構(gòu)。UDA以COM技術(shù)為核心,協(xié)助程序員存取企業(yè)中各類不同的數(shù)據(jù)源。UDA以O(shè)LE-DB做為技術(shù)的骨架。OLE-DB定義了統(tǒng)一的COM接口做為存取各類異質(zhì)數(shù)據(jù)源的標(biāo)準(zhǔn),對各種數(shù)據(jù)庫管理系統(tǒng)服務(wù)進(jìn)行封裝,并允許創(chuàng)建軟件組件,實(shí)現(xiàn)這些服務(wù)。OLE DB 組件包括數(shù)據(jù)提供程序(包含和表現(xiàn)數(shù)據(jù))、數(shù)據(jù)使用者(使用數(shù)據(jù))和服務(wù)組件(處理和傳送數(shù)據(jù))。OLE DB 包含了一個(gè)連接 ODBC 的“橋梁”,對現(xiàn)用的各種 ODBC 關(guān)系型數(shù)據(jù)庫驅(qū)動程序提供一貫的支持。但仍然OLEDB是一個(gè)低層次的,利用效率不高。
2.ADO。ADO(ActiveX Data Object)動態(tài)數(shù)據(jù)對象。雖然OLE-DB允許程序員存取各類數(shù)據(jù),是一個(gè)非常良好的架構(gòu),但是由于OLE-DB太底層化,而且在使用上非常復(fù)雜,需要程序員擁有高超的技巧,因此只有少數(shù)的程序員才有辦法使用OLE-DB。這讓OLE-DB無法廣為流行。為了解決這個(gè)問題, Microsoft同樣以COM技術(shù)封裝OLE-DB為ADO對象,OLEDB處于ODBC層和應(yīng)用層之間。ADO是OLEDB上面的一種“應(yīng)用”。從而簡化了程序員數(shù)據(jù)存取的工作。由于 ADO成功地封裝了OLE-DB大部分的功能,并且大量簡化了數(shù)據(jù)存取工作,因此 ADO也逐漸被愈來愈多的程序員所接受。
3. JDBC
Java語言的普及使數(shù)據(jù)庫技術(shù)在JAVA語言中的應(yīng)用也迅速發(fā)展起來,JDBC(Java DataBase Connectivity)是JAVA執(zhí)行SQL語句的Java API,JDBC定義了一個(gè)支持標(biāo)準(zhǔn)SQL功能的通用低層的應(yīng)用程式編程接口(API),他由Java 語言編寫的類和接口組成,旨在讓各數(shù)據(jù)庫研發(fā)商為Java程式員提供標(biāo)準(zhǔn)的數(shù)據(jù)庫API。JDBC API定義了若干Java中的類,表示數(shù)據(jù)庫連接、SQL指令、結(jié)果集、數(shù)據(jù)庫元數(shù)據(jù)等。他允許Java程式員發(fā)送SQL指令并處理結(jié)果。通過驅(qū)動程式管理器,JDBC API可利用不同的驅(qū)動程式連接不同的數(shù)據(jù)庫系統(tǒng)。
四、結(jié)束語
在ODBC中,應(yīng)用程序不會直接存取數(shù)據(jù)庫,它必須通過管理器和數(shù)據(jù)庫交換信息。ODBC管理器負(fù)責(zé)將應(yīng)用程序的SQL語句及其他信息傳遞給驅(qū)動程序,而驅(qū)動程序則負(fù)責(zé)將運(yùn)行結(jié)果送回應(yīng)用程序,從而提供了一種不同應(yīng)用程序?qū)?shù)據(jù)庫的操作的一種規(guī)范,實(shí)現(xiàn)了程序員對具體關(guān)系型DBMS的訪問的“透明性”,而ADO技術(shù)則把這種數(shù)據(jù)類型擴(kuò)展到了非關(guān)系型數(shù)據(jù)庫,并且同現(xiàn)在主流的向?qū)ο蟮木幊趟枷胍恢拢琂DBC則是數(shù)據(jù)庫訪問技術(shù)應(yīng)用在JAVA語言中的一個(gè)典型技術(shù)。
參考文獻(xiàn):
[1](美)Kyle Geiger ODBC深入剖析[M] 電子工業(yè)出版社 1996.
[2]文必龍,邵慶開放數(shù)據(jù)庫互聯(lián)(ODBC)技術(shù)與應(yīng)用[M] 科學(xué)出版社1997,89-113
[3]David Sceppa ADO編程技術(shù)[M] 清華大學(xué)出版社2001,21-30
[4](美)泰勒 JDBC數(shù)據(jù)庫編程與J2EE[M] 電子工業(yè)出版社 2004,37-58
[5]劉紅鑠 李曉 基于JDBC數(shù)據(jù)庫查詢和發(fā)布[J] 計(jì)算機(jī)應(yīng)用研究 2000,11