JDBC與ODBC (轉(zhuǎn))
發(fā)表時間:2023-08-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]異構(gòu)數(shù)據(jù)庫系統(tǒng)是由多個異構(gòu)的成員數(shù)據(jù)庫系統(tǒng)組成的數(shù)據(jù)庫系統(tǒng),異構(gòu)性體現(xiàn)為各個成員數(shù)據(jù)庫之間在硬件平臺、操作系統(tǒng)或數(shù)據(jù)庫管理系統(tǒng)等方面的不同。 ----Internet上大量信息必須通過數(shù)據(jù)庫系統(tǒng)才能...
異構(gòu)數(shù)據(jù)庫系統(tǒng)是由多個異構(gòu)的成員數(shù)據(jù)庫系統(tǒng)組成的數(shù)據(jù)庫系統(tǒng),異構(gòu)性體現(xiàn)為各個成員數(shù)據(jù)庫之間在硬件平臺、操作系統(tǒng)或數(shù)據(jù)庫管理系統(tǒng)等方面的不同。
----Internet上大量信息必須通過數(shù)據(jù)庫系統(tǒng)才能有效管理。由于歷史等原因,Internet上的數(shù)據(jù)庫系統(tǒng)不少是異構(gòu)的。為了在Internet環(huán)境下,基于異種系統(tǒng)平臺實現(xiàn)對異構(gòu)數(shù)據(jù)庫的查詢和聯(lián)合使用,必須提供一個獨立于特定的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)一編程界面。
----目前許多數(shù)據(jù)庫系統(tǒng)均支持SQL,對于由SQL數(shù)據(jù)庫組成的異構(gòu)數(shù)據(jù)庫系統(tǒng),JDBC和ODBC為訪問其異構(gòu)成員提供了統(tǒng)一的方式,也為各異構(gòu)成員之間的協(xié)作和多個成員之上的操作打下了基礎(chǔ)。本文簡單介紹了JDBC和ODBC對各個異構(gòu)的數(shù)據(jù)庫進行統(tǒng)一訪問和協(xié)作的原理及其應(yīng)用。
ODBC
----ODBC(Open DataBase Connectivity)是微軟倡導(dǎo)的、當(dāng)前被業(yè)界廣泛接受的、用于數(shù)據(jù)庫訪問的應(yīng)用程序編程接口(API),它以X/Open和 ISO/IEC的調(diào)用級接口(CLI)規(guī)范為基礎(chǔ),并使用結(jié)構(gòu)化查詢語言(SQL)作為其數(shù)據(jù)庫訪問語言。 ODBC總體結(jié)構(gòu)有四個組件:
----· 應(yīng)用程序 執(zhí)行處理并調(diào)用ODBC API函數(shù),以提交 SQL語句并檢索結(jié)果。
----· 驅(qū)動程序管理器(Driver Manager) 根據(jù)應(yīng)用程序需要加載/卸載驅(qū)動程序,處理ODBC函數(shù)調(diào)用,或把它們傳送到驅(qū)動程序。
----· 驅(qū)動程序 處理ODBC函數(shù)調(diào)用,提交SQL請求到一個指定的數(shù)據(jù)源,并把結(jié)果返回到應(yīng)用程序。如果有必要,驅(qū)動程序修改一個應(yīng)用程序請求,以使請求與相關(guān)的DBMS支持的語法一致。
----· 數(shù)據(jù)源 包括用戶要訪問的數(shù)據(jù)及其相關(guān)的操作系統(tǒng)、DBMS及用于訪問DBMS的網(wǎng)絡(luò)平臺。
----ODBC驅(qū)動程序的使用把應(yīng)用程序從具體的數(shù)據(jù)庫調(diào)用中隔離開來,驅(qū)動程序管理器針對特定數(shù)據(jù)庫的各個驅(qū)動程序進行集中管理,并向應(yīng)用程序提供統(tǒng)一的標(biāo)準(zhǔn)接口,這就為ODBC的開放性奠定了基礎(chǔ)。
----數(shù)據(jù)庫獨立性
----ODBC是為最大的互用性而設(shè)計的,要求一個應(yīng)用程序有用相同的源代碼(不用重新編譯或重新鏈接)訪問不同的數(shù)據(jù)庫管理系統(tǒng)(DBMS)的能力。
----ODBC定義了一個標(biāo)準(zhǔn)的調(diào)用層接口(CLI)。這包含 X/Open和ISO/IEC的CLI規(guī)范中的所有函數(shù),并提供應(yīng)用程序普遍需要的附加函數(shù)。每個支持ODBC的DBMS需要不同的庫或驅(qū)動程序,驅(qū)動程序?qū)崿F(xiàn)ODBC API中的函數(shù)。當(dāng)需要改變驅(qū)動程序時,應(yīng)用程序不需要重新編譯或者重新鏈接,只是動態(tài)加載新的驅(qū)動程序,并調(diào)用其中的函數(shù)即可。如果要同時訪問多個DBMS系統(tǒng),應(yīng)用程序可加載多個驅(qū)動程序。如何支持驅(qū)動程序取決于操作系統(tǒng),例如,在Windows操作系統(tǒng)上,驅(qū)動程序是動態(tài)鏈接庫(DLL)。
----使用相同源代碼的應(yīng)用程序訪問不同的DBMS,體現(xiàn)了 ODBC的數(shù)據(jù)庫獨立性。
----對數(shù)據(jù)庫特殊功能的支持
----各個DBMS參照的標(biāo)準(zhǔn)、提供的功能不盡相同,應(yīng)用程序如何以統(tǒng)一的接口使用各個DBMS特有的功能呢?
----一方面,ODBC為所有DBMS功能都定義了公共接口。這些DBMS功能比多數(shù)DBMS支持的更多,但只要求驅(qū)動程序?qū)崿F(xiàn)這些功能的一個子集。另一方面,ODBC定義了API和SQL語法一致層,它規(guī)定驅(qū)動程序應(yīng)支持的基本功能。 ODBC還提供兩個函數(shù)(SQLGetInfo和SQLGetFunctions)返回關(guān)于驅(qū)動程序和DBMS能力的一般信息及驅(qū)動程序支持的函數(shù)列表。因此,應(yīng)用程序可以檢查DBMS支持的特殊功能。
----這樣,編寫應(yīng)用程序時,就可以檢查并自動使用各個驅(qū)動程序?qū)?yīng)的DBMS所支持的特殊功能。這樣做的優(yōu)點是當(dāng)增加DBMS支持的功能時,應(yīng)用程序不需要改變,只需安裝更新的驅(qū)動程序,應(yīng)用程序便可以自動發(fā)現(xiàn)并使用這些功能。
----互操作能力
----通過使用多個驅(qū)動程序可以同時訪問多個DBMS系統(tǒng)。 ODBC提供的Driver Manager實現(xiàn)所有的ODBC函數(shù),多數(shù)是傳遞調(diào)用給驅(qū)動程序中的ODBC 函數(shù),并靜態(tài)鏈接應(yīng)用程序,或在應(yīng)用程序運行時加載它。這樣,應(yīng)用程序在Driver Manager 中按名調(diào)用驅(qū)動ODBC函數(shù),而不是通過每個驅(qū)動程序中的指針。當(dāng)應(yīng)用程序需要通過特定的驅(qū)動程序時,它首先需要一個標(biāo)識驅(qū)動程序的連接句柄。Driver Manager加載驅(qū)動程序,并存儲每個驅(qū)動程序中的函數(shù)地址。要使驅(qū)動程序調(diào)用一個ODBC函數(shù),可在應(yīng)用程序調(diào)用 Driver Manager中的函數(shù),并為驅(qū)動程序傳送連接句柄,然后Driver Manager使用以前存儲的地址來調(diào)用函數(shù)。
----ODBC可以同時連接到多個DBMS,解決了同時訪問多個DBMS的問題,提供了異構(gòu)成員數(shù)據(jù)庫之間互操作的能力。
JDBC
----JDBC(Java DataBase Connectivity)是Java與數(shù)據(jù)庫的接口規(guī)范,JDBC定義了一個支持標(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)。
----JDBC與ODBC都是基于X/Open的SQL調(diào)用級接口, JDBC的設(shè)計在思想上沿襲了ODBC,同時在其主要抽象和SQL CLI實現(xiàn)上也沿襲了ODBC,這使得JDBC容易被接受。JDBC的總體結(jié)構(gòu)類似于ODBC,也有四個組件:應(yīng)用程序、驅(qū)動程序管理器、驅(qū)動程序和數(shù)據(jù)源。
----JDBC保持了ODBC的基本特性,也獨立于特定數(shù)據(jù)庫。使用相同源代碼的應(yīng)用程序通過動態(tài)加載不同的JDBC驅(qū)動程序,可以訪問不同的DBMS。連接不同的DBMS時,各個DBMS之間僅通過不同的URL進行標(biāo)識。JDBC的 DatabaseMetaData接口提供了一系列方法,可以檢查DBMS對特定特性的支持,并相應(yīng)確定有什么特性,從而能對特定數(shù)據(jù)庫的特性予以支持。與ODBC一樣,JDBC也支持在應(yīng)用程序中同時建立多個數(shù)據(jù)庫連接,采用JDBC可以很容易地用SQL語句同時訪問多個異構(gòu)的數(shù)據(jù)庫,為異構(gòu)的數(shù)據(jù)庫之間的互操作奠定基礎(chǔ)。
----但是,JDBC除了具有ODBC的上述特點外,更具有對硬件平臺、操作系統(tǒng)異構(gòu)性的支持。這主要是因為ODBC使用的是C語言,而JDBC使用的是Java語言。Java語言具有與平臺無關(guān)、移植性強、安全性高、穩(wěn)定性好、分布式、面向?qū)ο蟮缺姸鄡?yōu)點,而JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關(guān)性, JDBC應(yīng)用程序可以自然地實現(xiàn)跨平臺特性,因而更適合于Internet上異構(gòu)環(huán)境的數(shù)據(jù)庫應(yīng)用。
----此外,JDBC驅(qū)動程序管理器是內(nèi)置的,驅(qū)動程序本身也可通過Web瀏覽器自動下載,無須安裝、配置;而ODBC驅(qū)動程序管理器和ODBC驅(qū)動程序必須在每臺客戶機上分別安裝、配置。
JDBC和ODBC在Internet上的應(yīng)用
----JDBC和ODBC由于具有數(shù)據(jù)庫獨立性甚至平臺無關(guān)性,因而對Internet上異構(gòu)數(shù)據(jù)庫的訪問提供了很好的支持。
----在Internet上訪問數(shù)據(jù)庫通常采用三層模式。以JDBC為例,在三層模式中客戶端的Java Applet主要作為用戶界面,它不直接與數(shù)據(jù)庫交換信息,而是通過自定義的應(yīng)用層網(wǎng)絡(luò)協(xié)議與應(yīng)用服務(wù)器交互,應(yīng)用服務(wù)器通過JDBC與數(shù)據(jù)庫服務(wù)器交換信息,并實現(xiàn)應(yīng)用邏輯。DM3的JDBC和ODBC驅(qū)動程序支持目前流行的ASP和JSP技術(shù),可以分別借助ODBC和JDBC同時訪問Internet上多個異構(gòu)的數(shù)據(jù)庫。
----ASP是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。ASP使用VBScript之類的腳本語言,它在HTML代碼中嵌入某種程序代碼,由HTML代碼負(fù)責(zé)描述信息的顯示樣式,由嵌入的程序代碼來描述處理邏輯。在ASP 下,VBScript代碼被ASP引擎在Web服務(wù)器端解釋執(zhí)行,執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給瀏覽器。這里,VBScript代碼可以通過ODBC訪問多個異構(gòu)的數(shù)據(jù)庫。
----JSP是一種基于Java Servlet的Web開發(fā)技術(shù),它和ASP 非常相似,但又有區(qū)別:在JSP下,嵌入HTML頁面的程序代碼是Java代碼;頁面中嵌入的程序代碼被編譯成Servlet(這種編譯操作僅在對JSP頁面的第一次請求時發(fā)生)并由Java 虛擬機執(zhí)行。這里Java代碼可以通過JDBC訪問多個異構(gòu)的數(shù)據(jù)庫,其平臺無關(guān)性特別好。當(dāng)前,Internet上的數(shù)據(jù)庫應(yīng)用已越來越多,JDBC和ODBC必將在Internet上的異構(gòu)數(shù)據(jù)庫訪問中發(fā)揮重要的作用。