現在目前數據庫(數據庫培訓 數據庫認證 )驅動程序市場上,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數據庫驅動程序;然後再連接到數據庫。中間經過了多個環節。如何其中任何一個環節出現了問題,都可能導致數據庫連接的故障。萬一真的出現了問題的話,那麼數據庫管理員查找問題就會變得復雜的多。
總之筆者建議數據庫管理員最好采用第一、二種數據庫驅動程序;如果這兩種驅動程序不支持的話,那麼就采用第三種驅動程序。對於第一種驅動程序數據庫管理員要慎用,除非數據庫管理員對自己的能力相當的自信。