現在目前數據庫驅動程序市場上JDBC數據庫驅動程序主要有四個類型這個四個類型的驅動程序各有各的特點並不能夠說哪一個最好數據庫管理員需要結合企業的實際情況才能夠選擇一個合適的數據庫驅動類型下面筆者就JDBC數據庫驅動程序來談談這個四個類型的JDBC各具有什麼樣的特點適合在什麼樣的情況下使用
類型一廠商提供專屬JDBC驅動程序
有些廠商如Oracle或者SYBASE這些數據庫廠商他們自己開發了一些JDBC驅動程序這個類型的JDBC驅動程序會將JDBC調用直接轉換為關系數據庫本身使用的通信協議換一句話說應用程序客戶端可以直接與數據庫創建連接這種類型的JDBC驅動程序主要有如下幾個特點
一是JDBC驅動程序是數據庫廠商提供的所以應用程序可以直接跟數據庫進行連接其執行性能要比其他類型的JDBC數據庫驅動程序要好比ODBC數據庫驅動程序也要好目前已經有很多數據庫廠商提供專屬的JDBC驅動程序如甲骨文公司的Oracle數據庫產品如微軟公司的SQL Server等等
二是往往這類JDBC驅動程序全部是由JAVA程序開發的而不是有C語言開發的為此這類驅動程序往往跨平台的性能比較好可以在多個操作系統平台上運行為此如果企業在Linux等非微軟的操作系統上部署數據庫應用那麼采用這種類型的數據庫驅動程序是一個明智的選擇
三是這類驅動程序缺乏彈性由於是數據庫廠商自己提供的專屬驅動程序為此往往只適用於自己的數據庫系統甚至只適合某個版本的數據庫系統如果後台數據庫換了一個或者版本升級了則就有可能需要更換數據庫驅動程序這一個缺陷是限制這個類型的數據庫驅動程序應用的最大障礙之一不過根據筆者的經驗如果企業的數據庫應用主要是在企業局域網內部使用則這個問題不會很大因為此時企業往往不會隨意更換數據庫系統或者對數據庫系統進行升級為此也就會不會因為這個數據庫驅動程序彈性不好而給日後的工作帶來麻煩
為此筆者建議如果企業的數據庫應用相對穩定那麼在數據庫開發或者部署的時候最好使用廠商提供的專屬JDBC驅動程序因為這個類型的數據庫驅動程序其與數據庫之間的連接最直接其執行性能最好不過其前提是數據庫廠商提供了這種類型的JDBC驅動程序據筆者了解像開源的MySQL數據庫好像還沒有提供專屬的JDBC驅動程序如果數據庫管理員在MySQL數據庫平台上部署應用的話則即使想采用專屬JDBC數據庫驅動程序也是行不通的此時可能管理員要采用其他類型的JDBC數據庫驅動程序
類型二三層式架構的JDBC驅動程序
這種三層式架構的JDBC驅動程序主要采用間接連接方式來連接數據庫首先JDBC數據庫驅動程序會先將JDBC函數調用翻譯成與數據庫無關的網絡通信協議其次由一個叫做中介層服務器的部件會充當翻譯家的角色會對這些報文進行翻譯最後JDBC才把這部分內容轉換成相對應的關系型數據庫通信協議也就是說在客戶端與數據庫服務器之間有一個中介服務器的角色客戶端與服務器之間的通信需要通過這個中介服務器來進行
這個類型的JDBC數據庫驅動類型有如下幾個特點
一是提供了比較好的擴展性如當某些原因下需要更換後台數據庫的時候只需要調整中介層與數據庫之間的JDBC驅動程序即可而對於前端的應用程序的負面影響可以降至到最低在大部分情況下前端的應用程序基本上不需要調整;有些只需要重新指定所采用的後台數據庫即可
二是這個JDBC驅動程序也是百分之百利用JAVA語言進行編寫的為此如果采用的應用程序開發平台也是JAVA的話那麼無疑他們之間的兼容性會很好所以如果采用的是JDeveloper等JAVA開發平台的話這種類型的數據庫驅動程序能夠為數據庫開發人員提供比較穩定的開發平台
三是在性能上其不甚理想由於采用三層式架構的JDBC數據庫驅動程序其需要通過中介服務器角色來訪問數據庫雖然這種架構提供了比較高的擴展性但是其執行性能的話就受到了影響在同等條件下這種類型的數據庫驅動程序其執行性能沒有專屬JDBC驅動程序好魚與熊掌不能夠兼得數據庫開發人員需要在性能與擴展性上做出一個艱難的抉擇
類型三客戶端函數庫類型的數據庫驅動程序
通常情況下數據庫軟件會提供一種叫做客戶端函數庫的組件這種類型的數據庫驅動程序就是建立在這個函數庫之上的此時系統會先將JDBC調用轉換成數據庫的客戶端函數庫對應的應用程序接口(這個步驟在客戶端上完成)然後再同數據庫進行連接這種方式跟三層式架構的JDBC驅動程序不同前者是直接連接數據庫的而後者則是以間接的方式(中間有中介服務器角色)來連接數據庫對於這種類型的數據庫驅動程序有如下幾個特點
一是創建於各數據庫特有的客戶端函數庫之上為此其執行性能比較好通常情況下各個數據庫廠商會根據自己數據庫軟件的特點開發客戶端函數庫他們在開發這個函數庫的同時本身就考慮到了性能與優化方面的問題而且這種類型的數據庫驅動程序又是直接連接數據庫的為此從性能上考慮其要比三層式架構的JDBC驅動程序要好的多但是反過來說其執行性能在同等條件下仍然趕不上第一種專屬JDBC驅動程序
二是其兼容性差如果數據庫管理員采用這個類型的數據庫驅動程序的話需要在客戶端上安裝特定的軟件(其中包含有客戶端函數庫)而且這個軟件往往是數據庫廠商提供的不同廠商的數據庫軟件其客戶端函數庫是不同的為此如果需要更換數據庫系統的話此時需要同時更新各個客戶端的函數庫當數據庫用戶比較多的時候這是非常耗時的一項工作
三是其不是百分之百的利用JAVA語言編寫由於客戶端函數庫中的內容很多都是跟數據庫的編程平台相關為此這種類型的JDBC驅動程序不可能百分之百都有JAVA語言來實現由於這方面的限制為此其跟JAVA應用程序開發平台的兼容性就沒有以上兩個類型的驅動程序那麼好了而且能夠提供這種類型的數據庫驅動程序的廠商也不是很多如好像微軟的SQL SERVER等數據庫系統也沒有提供這方面的JDBC驅動程序所以從應用層面考慮這種數據庫驅動類型是使用的最少的
類型四橋接型的JDBC驅動程序
有些應用系統以前是在ODBC數據庫啟動程序上面開發的;而現在數據庫管理想在JDBC數據庫驅動程序開發應用程序那該怎麼辦呢?數據庫開發人員是否需要推翻原有的架構進行重新開發呢?答案是否定的也是肯定的這個答案或許有點前後矛盾的感覺否定說的是數據庫管理員不用全部推翻原先的架構而是可以原先的架構跟新的架構並存肯定的是為了後續應用程序性能與穩定性的考慮在合適的時候數據庫開發人員最好能夠慢慢的對原先的開發架構進行調整不過在這個調整的過程中新舊兩個開發架構是可以同時采用的另外有些數據庫系統可能沒有提供以上三種類型的任何一種JDBC數據庫啟動程序如使用用戶比較多的ACCESS數據庫系統如果JAVA程序開發人員需要在這個數據庫上開發應用軟件的話可能就需要用到這個橋接型的JDBC驅動程序這個類型的數據庫驅動程序有如下幾個特點
一是其保留了ODBC數據庫驅動程序把相關的SQL語句通過JDBC驅動程序轉換為ODBC數據庫驅動程序可以理解的語句應用這個數據類型的時候數據庫管理員不用考慮數據庫底層的連接問題同時如果應用系統原先是在ODBC的架構下開發的還可以保留原先的架構
二是其維護比其他類型的驅動程序都要麻煩與復雜一方面由於這種類型的驅動程序仍然需要用到ODBC所以在客戶端上還需要部署有ODBC驅動程序另一方面系統先調用JDBC驅動程序;然後再通過JDBC驅動程序調用ODBC數據庫驅動程序;然後再連接到數據庫中間經過了多個環節如何其中任何一個環節出現了問題都可能導致數據庫連接的故障萬一真的出現了問題的話那麼數據庫管理員查找問題就會變得復雜的多
總之筆者建議數據庫管理員最好采用第一二種數據庫驅動程序;如果這兩種驅動程序不支持的話那麼就采用第三種驅動程序對於第一種驅動程序數據庫管理員要慎用除非數據庫管理員對自己的能力相當的自信
From:http://tw.wingwit.com/Article/program/SQL/201311/16378.html