在學習J2EE的JDBC過程中,剛見到JDBC就馬上聯想到了ODBC,而且我們可以肯定他們之間有必然的關系。開始學它的時候還是覺得有點暈,於是就查了很多資料,與比較熟悉的ODBC進行了比較。
先各自簡單介紹一下ODBC和JDBC。
ODBC(Open Database Connectivity)是一組對數據庫訪問的標准API,這些API通過SQL來完成大部分任務,而且它本身也支持SQL語言,支持用戶發來的SQL。ODBC定義了訪問數據庫API的一組規范,這些API獨立於形色各異的DBMS和編程語言。
也就是說,一個基於ODBC的應用程序,對數據庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數據庫操作由對應的DBMS的ODBC驅動程序完成。不論是SQL Server、Access還是Oracle數據庫,均可用ODBC API進行訪問。
由此可見,ODBC的最大優點是能以統一的方式處理所有的數據庫。
JDBC(JavaDatabase Connectivity)是Java與數據庫的接口規范,JDBC定義了一個支持標准SQL功能的通用低層API,它由Java 語言編寫的類和接口組成,旨在讓各數據庫開發商為Java程序員提供標准的數據庫API。
JDBC API定義了若干Java中的類,表示數據庫連接、SQL指令、結果集、數據庫元數據等。它允許Java程序員發送SQL指令並處理結果。
其實JDBC和ODBC總的來說還是有更多的共同點:
比如,JDBC與ODBC都是基於X/Open的SQL調用級接口;
從結構上來講,JDBC的總體結構類似於ODBC,都有四個組件:應用程序、驅動程序管理器、驅動程序和數據源,工作原 理亦大體相同;
在內容交互方面,JDBC保持了ODBC的基本特性,也獨立於特定數據庫. 而且都不是直接與數據庫交互,而是通過驅動程序管理器。
他們二者之間的區別:
我們知道,ODBC幾乎能在所有平台上連接幾乎所有的數據庫。為什麼 Java 不使用 ODBC? 答案是:Java 可以使用 ODBC,但最好是以JDBC-ODBC橋的形式使用(Java連接總體分為Java直連和JDBC-ODBC橋兩種形式)。 那為什麼還需要 JDBC? 因為ODBC 不適合直接在 Java 中使用,因為它使用 C 語言接口。從Java 調用本地 C代碼在安全性、實現、堅固性和程序的自動移植性方面都有許多缺點。從 ODBC C API 到 Java API 的字面翻譯是不可取的。例如,Java 沒有指針,而 ODBC 卻對指針用得很廣泛(包括很容易出錯的指針"void *")。 另外,ODBC 比較復雜,而JDBC 盡量保證簡單功能的簡便性,同時在必要時允許使用高級功能。如果使用ODBC,就必須手動地將 ODBC 驅動程序管理器和驅動程序安裝在每台客戶機上。如果完全用 Java 編寫 JDBC 驅動程序則 JDBC代碼在所有 Java 平台上(從網絡計算機到大型機)都可以自 動安裝、移植並保證安全性。 總之,JDBC 在很大程度上是借鑒了ODBC的,從他的基礎上發展而來。JDBC 保留了 ODBC 的基本設計特征,因此,熟悉 ODBC 的程序員將發現 JDBC 很容易使用。它們之間最大的區別在於:JDBC 以 Java 風格與優點為基礎並進行優化,因此更加易於使用。