今天正好需要統計三個網站欄目信息更新情況,而這三個網站的后台采用了不同的數據庫管理系統。初步想法是通過建立一個小的Tomcat webapp,進而通過JDBC訪問這三個后台數據庫,並根據返回的數據生成報表。
1 開發環境
- 數據庫管理系統:一個是SqlServer 2000,另一個是Oracle 9i,再一個是PostgreSQL9.1
- Tomcat執行平台:CentOSx64 + JDK7.0x64 (全64位環境)
2 JDBC驅動的選擇
2.1 Oracle9i
Oracle官方提供了ojdbc6.jar這個type 4 JDBC驅動,僅此一個文件就能完成對JDBC的支持,將其拷貝到WEB-INF/lib下。關鍵代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String dbUrl = "jdbc:oracle:thin:@IP地址:1521:實例名";
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String dbUrl = "jdbc:oracle:thin:@IP地址:1521:實例名";
oracle對於兼容性做的非常好,這個版本的JDBC驅動對oracle9i依然支持良好。
2.2 SqlServer2000
微軟官方也提供了SqlServer的type 4 JDBC驅動,具體說來有兩個文件:sqljdbc4.jar, sqljdbc.jar,其中帶4的是最新的版本可以運行於JDK7.0下,而不帶4的版本不能運行於
JDK7下,問題是sqljdbc4.jar只支持SqlServer 2005以上的版本,不支持SqlServer 2000。也就是說要想通過微軟提供的JDBC驅動操作SqlServer 2000,你的JDK版本一定要比JDK7低才行,可是我們的開發環境已經確定了是JDK7。
有此想到了兩個解決思路:
一是使用JDBC-ODBC橋接,unixODBC是Linux平台上的ODBC實現,進而還需要安裝SqlServer 2000的ODBC驅動,www.unixODBC.org給出了兩個鏈接,一個不是免費開源的;另一個是基於freetds的ODBC驅動,不知為什么www.freetds.org網站打不開了。我以前用過freetds的命令行連接SqlServer還是不錯的。ODBC的配置非常復雜,尤其是在Linux 環境下,特別不友好。懶惰的心理下,放棄了這種思路。
二是既然freetds可以操作SqlServer,為什么不越過ODBC,讓JDBC直接基於tds呢,很幸運在網上找到了一個好的解決方案:jTDS,詳見http://jtds.sourceforge.net。這個項目提供了基於TDS協議的JDBC實現,是一個純的type 4 JDBC驅動,通過一個jtds-1.3.0.jar即可滿足通過JDBC訪問SqlServer2000的需要。而且可以運行於JDK7.0下,正好滿足我的要求。
最終采取了第二種思路,關鍵代碼如下:
Class.forName("net.sourceforge.jtds.jdbc.Driver");
DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver());
String dbUrl = "jdbc:jtds:sqlserver://IP地址:1433/數據庫名";
DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver());
String dbUrl = "jdbc:jtds:sqlserver://IP地址:1433/數據庫名";
2.3 PostgreSQL9.1
官網jdbc.potgresql.org提供postgresql-9.2-1000.jdbc4.jar,這也是一個type 4 JDBC驅動,下載即可使用。關鍵代碼如下:
Class.forName("org.postgresql.Driver");
dbUrl = "jdbc:postgresql://IP地址:5432/數據庫名";
這個驅動加載的時候自動注冊,所以不需要再單獨進行registerDriver了。
3 總結
通過這個小小的項目,總結一下目前常用的數據庫的JDBC驅動選擇:
(1)SQL Server 對於2005及以上版本,建議使用微軟官方的type 4JDBC驅動;對於2000版本,如果JDK環境較老,可以使用微軟官方版本,如果JDK7.0則使用jTDS這個type 4JDBC驅動;
(2)Oracle,對於所有版本推薦使用官方的thin驅動,也就是type4的JDBC驅動;
(3)PostgreSQL, MySql,官方提供了type 4的JDBC驅動,使用即可。
網絡是個寶藏,但是要找到你真正需要的東西,就必須有完整的知識體系結構,必須有清晰的分析思路。
如果需要在.net框架下訪問Sqlserver和Oracle,可以參考我的另一篇博客:
http://blog.csdn.net/smstong/article/details/5874451