JDBC與ODBC之迷

自從開始接觸數據庫編程,就很想把數據庫連接的驅動程序,接口之類的東西搞清楚,無奈這麼久過去了,還是沒有什麼收穫,今天閒來,在網上搜索了下,想把知道的點東西寫下來。

首先應該搞清楚應用程序編程接口(ODBC,JDBC)產生的原因。
在市場上肯定不止一家公司在開發數據庫管理系統,也不止一家公司開發操作系統,研發主板。然而他們的沒有統一的標準,這就造成了程序員在編寫程序訪問數據庫的時候,對於不同的硬件環境,不同的操作系統,不同的數據庫管理系統就要編寫不同數據庫訪問代碼。這也就是所謂的[color=red]異構數據庫系統[/color]

對於支持SQL語言的異構數據庫系統,JDBC和ODBC就提供了訪問其異構成員的統一的方式。


ODBC

ODBC(Open DataBase Connectivity)是微軟倡導的、當前被業界廣泛接受的、用於數據庫訪問的應用程序編程接口(API),它以X/Open和 ISO/IEC的調用級接口(CLI)規範爲基礎,並使用結構化查詢語言(SQL)作爲其數據庫訪問語言。

它包括四個組件:
1,應用程序 執行並調用ODBC API函數,以提交SQL語句和檢索結果。
2,驅動程序管理器 根據應用程序的需要加載/卸載驅動程序,處理ODBC函數調用,並把它送入驅動程序。
3,驅動程序 處理ODBC函數調用,並把SQL請求提交給一個指定的數據源,並返回結果集給應用程序。
4,數據源 包括要訪問的數據及其相關的操作系統,DBMS及用於訪問DBMS的網絡平臺。


ODBC驅動程序把應用程序從具體的數據庫調用中隔離出來,驅動程序管理器針對特定數據庫的各個驅動程序進行集中管理,並嚮應用程序提供統一的標準接口。

其實這些東西說白了,就是開發了一箇中間件,將兩個耦合度高的東西松開了。其實以前要寫的訪問不同數據庫的東西現在都變成了不同的驅動程序而已。相當於把那些代碼提出來以便重用。


JDBC

JDBC(Java DataBase Connectivity)是Java與數據庫的接口規範,JDBC定義了一個支持標準SQL功能的通用低層的應用程序編程接口(API),它由Java 語言編寫的類和接口組成,旨在讓各數據庫開發商爲Java程序員提供標準的數據庫API。

它也包括四個組件,而且其原理與ODBC是一樣的。都是通過驅動程序管理器加載不同的驅動程序來訪問不同的數據庫系統。

不同之處在於:
ODBC是用C來寫的,而JDBC是用JAVA來寫的,這就造就了他們之間一個很大的不同。用JAVA寫的JDBC具有很強的移植性,而ODBC不具備這種特性。

引用:
JDBC除了具有ODBC的上述特點外,更具有對硬件平臺、操作系統異構性的支持。這主要是因爲ODBC使用的是C語言,而JDBC使用的是Java語言。Java語言具有與平臺無關、移植性強、安全性高、穩定性好、分佈式、面向對象等衆多優點,而JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關性, JDBC應用程序可以自然地實現跨平臺特性,因而更適合於Internet上異構環境的數據庫應用。


相同之處:
除了原理相同外,JDBC和ODBC還有其他相同之處,下面的JDBC同樣具有

ODBC是爲最大的互用性而設計的,要求一個應用程序有用相同的源代碼(不用重新編譯或重新鏈接)訪問不同的數據庫管理系統(DBMS)的能力,這體現了 ODBC的數據庫獨立性。


對數據庫特殊功能的支持

各個DBMS參照的標準、提供的功能不盡相同,應用程序如何以統一的接口使用各個DBMS特有的功能呢?

一方面,ODBC爲所有DBMS功能都定義了公共接口。這些DBMS功能比多數DBMS支持的更多,但只要求驅動程序實現這些功能的一個子集。
另一方面,ODBC定義了API和SQL語法一致層,它規定驅動程序應支持的基本功能。 ODBC還提供兩個函數(SQLGetInfo和SQLGetFunctions)返回關於驅動程序和DBMS能力的一般信息及驅動程序支持的函數列表。因此,應用程序可以檢查DBMS支持的特殊功能。
這樣,編寫應用程序時,就可以檢查並自動使用各個驅動程序對應的DBMS所支持的特殊功能。這樣做的優點是當增加DBMS支持的功能時,應用程序不需要改變,只需安裝更新的驅動程序,應用程序便可以自動發現並使用這些功能。


互操作能力

----通過使用多個驅動程序可以同時訪問多個DBMS系統。 ODBC提供的Driver Manager實現所有的ODBC函數,多數是傳遞調用給驅動程序中的ODBC 函數,並靜態鏈接應用程序,或在應用程序運行時加載它。這樣,應用程序在Driver Manager 中按名調用驅動ODBC函數,而不是通過每個驅動程序中的指針。當應用程序需要通過特定的驅動程序時,它首先需要一個標識驅動程序的連接句柄。Driver Manager加載驅動程序,並存儲每個驅動程序中的函數地址。要使驅動程序調用一個ODBC函數,可在應用程序調用 Driver Manager中的函數,併爲驅動程序傳送連接句柄,然後Driver Manager使用以前存儲的地址來調用函數。

----ODBC可以同時連接到多個DBMS,解決了同時訪問多個DBMS的問題,提供了異構成員數據庫之間互操作的能力。


JDBC和ODBC在Internet上的應用
 

----JDBC和ODBC由於具有數據庫獨立性甚至平臺無關性,因而對Internet上異構數據庫的訪問提供了很好的支持。

----在Internet上訪問數據庫通常採用三層模式。以JDBC爲例,在三層模式中客戶端的Java Applet主要作爲用戶界面,它不直接與數據庫交換信息,而是通過自定義的應用層網絡協議與應用服務器交互,應用服務器通過JDBC與數據庫服務器交換信息,並實現應用邏輯。DM3的JDBC和ODBC驅動程序支持目前流行的ASP和JSP技術,可以分別藉助ODBC和JDBC同時訪問Internet上多個異構的數據庫。

----ASP是面向Web服務器的技術,客戶端瀏覽器不需要任何附加的軟件支持。ASP使用VBScript之類的腳本語言,它在HTML代碼中嵌入某種程序代碼,由HTML代碼負責描述信息的顯示樣式,由嵌入的程序代碼來描述處理邏輯。在ASP 下,VBScript代碼被ASP引擎在Web服務器端解釋執行,執行結果被重新嵌入到HTML代碼中,然後一起發送給瀏覽器。這裏,VBScript代碼可以通過ODBC訪問多個異構的數據庫。

----JSP是一種基於Java Servlet的Web開發技術,它和ASP 非常相似,但又有區別:在JSP下,嵌入HTML頁面的程序代碼是Java代碼;頁面中嵌入的程序代碼被編譯成Servlet(這種編譯操作僅在對JSP頁面的第一次請求時發生)並由Java 虛擬機執行。這裏Java代碼可以通過JDBC訪問多個異構的數據庫,其平臺無關性特別好。當前,Internet上的數據庫應用已越來越多,JDBC和ODBC必將在Internet上的異構數據庫訪問中發揮重要的作用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章