淺談ODBC與JDBC

抄自:https://blog.csdn.net/qq_16691531/article/details/79482469

在學習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 風格與優點爲基礎並進行優化,因此更加易於使用。

用JAVA連接數據庫主要有兩種方式,
一是用JDBC-ODBC橋來連接,二是用相關廠商提供的相應驅動程序來連接,首先談談第一種連接。

JDBC-ODBC橋接器是用JdbcOdbc.Class和一個用於訪問ODBC驅動程序的本地庫實現的。對於WINDOWS平臺,該本地庫是一個動態連接庫DLL(JDBCODBC.DLL)。

由於JDBC在設計上與ODBC很接近。在內部,這個驅動程序把JDBC的方法映射到ODBC調用上,這樣,JDBC就可以和任何可用的ODBC驅動程序進行交互了。這種橋接器的優點是,它使JDBC目前有能力訪問幾乎所有的數據庫。通行方式如圖所示:

應用程序—JDBC API—JDBC-ODBC—ODBC API—ODBC層—數據源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章