在" />
時間:2022-11-19 18:30:01 | 來源:信息時代
時間:2022-11-19 18:30:01 來源:信息時代
數(shù)據(jù)庫應(yīng)用編程接口 : 應(yīng)用程序訪問數(shù)據(jù)庫的接口。數(shù)據(jù)庫應(yīng)用系統(tǒng)包括數(shù)據(jù)主體和數(shù)據(jù)客體兩個主要部分,數(shù)據(jù)客體即數(shù)據(jù)庫,數(shù)據(jù)主體是操作員(人)或應(yīng)用程序。主客體之間存在數(shù)據(jù)交換。
在數(shù)據(jù)庫發(fā)展初期,應(yīng)用環(huán)境是一種單機(jī)、集中式的工作環(huán)境,應(yīng)用邏輯相對簡單,數(shù)據(jù)交換一般表現(xiàn)為簡單直接的人一機(jī)交互方式,通過SQL語句實現(xiàn)數(shù)據(jù)交換。
隨著數(shù)據(jù)庫應(yīng)用規(guī)模與范圍的擴(kuò)大,應(yīng)用環(huán)境從單機(jī)、集中式逐步發(fā)展為多機(jī)、網(wǎng)絡(luò)的形式,應(yīng)用邏輯也日益復(fù)雜。由于數(shù)據(jù)庫管理系統(tǒng)自身的局限性,要開發(fā)一個完整的應(yīng)用系統(tǒng),還需要與程序設(shè)計語言相配合。于是,數(shù)據(jù)交換的數(shù)據(jù)主體由人演變?yōu)閼?yīng)用程序,并且應(yīng)用程序逐步與數(shù)據(jù)分離,這就需要應(yīng)用程序訪問數(shù)據(jù)庫的接口,即數(shù)據(jù)庫應(yīng)用編程接口(application program interface,API)。
數(shù)據(jù)庫API經(jīng)歷了幾個發(fā)展階段,在這些發(fā)展階段中出現(xiàn)了多種類型的數(shù)據(jù)庫API。
早期數(shù)據(jù)庫API有兩種形式,一種是基于通用程序設(shè)計語言(主語言)開發(fā)應(yīng)用程序;另一種是基于專用語言(將SQL與程序設(shè)計融于一體的自含式SQL)開發(fā)應(yīng)用程序。前者需要用預(yù)編譯程序?qū)QL語句先轉(zhuǎn)換為主語言編譯程序理解的代碼,然后編譯并裝配到數(shù)據(jù)庫,即執(zhí)行嵌入式SQL; 后者通常需要調(diào)用和執(zhí)行存儲過程。這兩種類型的數(shù)據(jù)庫API執(zhí)行速度較快,但使用起來不夠方便,因為數(shù)據(jù)庫及數(shù)據(jù)庫管理系統(tǒng)的多樣性決定了數(shù)據(jù)庫API的多樣性,而不同的數(shù)據(jù)庫API會給數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)、維護(hù)和更新帶來麻煩。目前,普遍使用的數(shù)據(jù)庫應(yīng)用系統(tǒng)結(jié)構(gòu)是客戶/服務(wù)器(C/S)或瀏覽器/服務(wù)器(B/S)方式。不管哪種方式,都有可能出現(xiàn)多個應(yīng)用建立于同一個數(shù)據(jù)庫的情況,甚至同一個應(yīng)用的數(shù)據(jù)來自多個不同的數(shù)據(jù)庫。特別是在網(wǎng)絡(luò)環(huán)境下,數(shù)據(jù)和應(yīng)用往往位于不同的網(wǎng)絡(luò)節(jié)點,多個應(yīng)用節(jié)點可能訪問同一個數(shù)據(jù)節(jié)點,一個應(yīng)用節(jié)點也可能訪問多個數(shù)據(jù)節(jié)點。這樣,建立統(tǒng)一的數(shù)據(jù)交換接口就顯得尤為重要,于是,應(yīng)用程序訪問數(shù)據(jù)庫的接口標(biāo)準(zhǔn)及相應(yīng)的接口應(yīng)運而生。此處所說的數(shù)據(jù)庫API通常指的就是標(biāo)準(zhǔn)數(shù)據(jù)庫API。標(biāo)準(zhǔn)數(shù)據(jù)庫 API 基本上都是調(diào)用級接口(call level interface),即不需要預(yù)編譯SQL語句或編制存儲過程,而是通過調(diào)用函數(shù)的方式實現(xiàn)與數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)交換。
最初,SQL訪問小組(SAG,現(xiàn)已合并到X/Open聯(lián)盟)提出一個調(diào)用級接口(call level interface,CLI)標(biāo)準(zhǔn),規(guī)定了在一個用標(biāo)準(zhǔn)程序設(shè)計語言編寫的應(yīng)用中執(zhí)行數(shù)據(jù)庫語言SQL語句的一系列結(jié)構(gòu)和過程,這些過程獨立地執(zhí)行SQL語句,這就是SQL/CLI。有了SQL/CLI,應(yīng)用程序通過調(diào)用函數(shù)的方式實現(xiàn)與數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)交換。其具體方法是,對網(wǎng)絡(luò)中的不同數(shù)據(jù)源根據(jù)SQL/CLI標(biāo)準(zhǔn),設(shè)置一組統(tǒng)一的數(shù)據(jù)交換函數(shù),客戶端對數(shù)據(jù)庫服務(wù)器提出請求的SQL語句以函數(shù)的參數(shù)形式出現(xiàn),連同函數(shù)本身一起傳遞至服務(wù)器執(zhí)行。
SAG將SQL/CLI放在1992年公布的SQL語言標(biāo)準(zhǔn)(SQL-92)的附錄中,并先后提交給微軟、ANSI和ISO等組織。1992年,SQL/CLI作為微軟開放數(shù)據(jù)庫連接(open database connectivity,ODBC)標(biāo)準(zhǔn)發(fā)布(不同版本ODBC標(biāo)準(zhǔn)在原有基礎(chǔ)上有不同程度的擴(kuò)充); 1995年SQL/CLI成為ISO標(biāo)準(zhǔn);1996年SQL/CLI正式作為SQL語言標(biāo)準(zhǔn)的第3部分公布。
理論上,一個符合SQL/CLI標(biāo)準(zhǔn)的數(shù)據(jù)庫API可以幫助用戶編寫可移植的對任何數(shù)據(jù)源都獨立的應(yīng)用程序,但實際上并不那么簡單。目前可用的SQL/CLI有很多種,主要由一些數(shù)據(jù)庫廠商和第三方獨立廠商或組織實現(xiàn)并提供,如Oracle的OCI和GLUE、IBM的DB2 UDB和DRDA、微軟的ODBC、Sybase的OPEN Client和OPEN Server、SAG的CLI、X/Open的CLI、Borland的IDAPI等。它們基本上符合SQL/CLI標(biāo)準(zhǔn)(其中微軟的ODBC和DB2 UDB CLI等產(chǎn)品還同時符合微軟發(fā)布的ODBC標(biāo)準(zhǔn)),但用法不盡相同。從性能上講,這些SQL/CLI使用靈活,但速度較慢,通常被用在決策支持系統(tǒng)中。
自微軟發(fā)布ODBC標(biāo)準(zhǔn)并推出ODBC接口之后,其他廠商也推出符合ODBC標(biāo)準(zhǔn)的ODBC接口產(chǎn)品。ODBC實際上是CLI標(biāo)準(zhǔn)的一個具體實現(xiàn),它為基于C、C++、C#、BASIC等語言的應(yīng)用程序提供了一種訪問各種數(shù)據(jù)源的統(tǒng)一的函數(shù)調(diào)用級接口。ODBC不僅在Windows平臺得到應(yīng)用,也擴(kuò)展到其他平臺,如Unix。
為方便用戶開發(fā)應(yīng)用程序,微軟又推出遠(yuǎn)程數(shù)據(jù)對象(remote data object,RDO),它是基于ODBC的一個對象模型層。
繼ODBC之后,為方便用戶開發(fā)基于多種數(shù)據(jù)源(結(jié)構(gòu)化/非結(jié)構(gòu)化)的應(yīng)用程序,并提高數(shù)據(jù)庫訪問效率,微軟又推出數(shù)據(jù)庫嵌入式鏈接對象(object link embedded database,OLE DB),并進(jìn)一步封裝OLE DB。先后推出網(wǎng)絡(luò)化多媒體數(shù)據(jù)對象(activeX data object,ADO)和ADO.NET,其中ADO比原始的OLE DB開發(fā)包更加豐富,便于用戶快速開發(fā)出數(shù)據(jù)庫應(yīng)用程序,特別是在Web數(shù)據(jù)庫訪問中獲得廣泛應(yīng)用。
在Internet環(huán)境下,公用網(wǎng)關(guān)接口(common gateway interface,CGI),可使用戶直接在瀏覽器上對數(shù)據(jù)庫進(jìn)行操縱。但它難以實現(xiàn)網(wǎng)頁數(shù)據(jù)的動態(tài)更新,逐漸被ADO技術(shù)所取代。
此外,微軟還推出過數(shù)據(jù)訪問對象(data access object,DAO),它是為桌面數(shù)據(jù)庫用戶設(shè)計的數(shù)據(jù)庫訪問對象,基于Microsoft Jet數(shù)據(jù)庫引擎。
上述這些接口基本上是為C語言、C++語言和BASIC語言的應(yīng)用程序設(shè)計的。隨著Java程序設(shè)計語言的日益廣泛應(yīng)用,SUN公司推出了為Java語言程序?qū)iT設(shè)計的數(shù)據(jù)庫訪問接口JDBC,以及基于J2EE平臺的數(shù)據(jù)庫訪問對象(DAO)。
JDBC最初是作為J2SE開發(fā)工具包的一部分,后來作為單獨的標(biāo)準(zhǔn)發(fā)布。JDBC標(biāo)準(zhǔn)同樣遵循SQL-92標(biāo)準(zhǔn)。從JDBC 3.0版開始,JDBC標(biāo)準(zhǔn)逐步提供SQL-99標(biāo)準(zhǔn)中被數(shù)據(jù)庫產(chǎn)品所廣泛支持的特性。該標(biāo)準(zhǔn)還規(guī)定以面向?qū)ο蟮姆椒▉砗喕瘧?yīng)用編程。Java應(yīng)用代碼通過JDBC接口可以比較方便地訪問數(shù)據(jù)庫、提交SQL語句和接收結(jié)果等。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。