今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统。初步想法是通过建立一个小的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:实例名";
 
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/数据库名";

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

Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL的更多相关文章

  1. linux下程序JDBC连接不到mysql数据库

    今天在linux下部署一个 JavaEE项目的时候总是连接不到Mysql数据库,检查之后发现连接池的配置确定是对的,进入linux服务器之后以mysql -uname -ppassword连接总是报A ...

  2. 在linux上通过JDBC连接ORACLE 时总是出现 java.sql.SQLRecoverableException: IO Error: Connection reset 的问题

    如标题所述,经过和度娘沟通了不知道多少遍最后看一篇文章解决, 我是通过执行jar来操作DB的.所以在命令中加了一个参数( 加粗,红色) eg: $JAVA_EXE -Djava.security.eg ...

  3. Linux(Centos)下jdbc连接oracle速度超慢的问题

    最近在centos下写个java swing程序,发现在linux用jdbc连接oracle及其缓慢,还经常失败.但是同样的程序在windows下运行就连接的非常快.网上搜索了很长时间都和我这情况没关 ...

  4. Linux下通过ODBC连接sqlserver

    Linux下通过ODBC连接sqlserver 1.需求: 最近有个需求就是要在linux下连接(可以执行sql语句)sqlserver 2.环境 操作系统:  Centos6.5 数据库:     ...

  5. 解决centos下tomcat启动太慢 & JDBC连接oracle太慢的问题

    近期遇到一个非常奇怪的问题,也不知道改了什么,tomcat启动非常慢,以前几秒就启动好了,现在要30秒左右. 而且,通过jdbc连接oracle数据库也非常慢,以前建立一个连接只要几十毫秒,现在也要1 ...

  6. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  7. jdbc连接oracle数据库

    /*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...

  8. JDBC连接ORACLE无法登陆java.sql.SQLException: ORA-01017: invalid username/password; logon denied

    当用jdbc连接Oracle数据库的时候 private Connection getConnection() throws SQLException { OracleDataSource ods = ...

  9. jdbc 连接 oracle rac

    jdbc 连接 oracle rac 的连接串如下:   jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192. ...

随机推荐

  1. Java知识点:内部类

    内部类class文件命名规则 普通内部类.静态内部类:<Outer>\$<Inner>.class,其中<Outer>为外部类类名,<Inner>为内部 ...

  2. HDU 4607 Park Visit (DP最长链)

    [题目]题意:N个城市形成一棵树,相邻城市之间的距离是1,问访问K个城市的最短路程是多少,共有M次询问(1 <= N, M <= 100000, 1 <= K <= N). [ ...

  3. Brew 编译mod错误Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI

    Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI.: Error: ...

  4. Azure SQL 数据库:服务级别与性能问答

    ShawnBice    2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...

  5. 图像、帧、片、NALU

    图像.帧.片.NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论: H.264 是一次概念的革新,它打破常规,完全没有 I 帧.P帧.B 帧的概念, ...

  6. 使用val()另一个妙用------选中select/checkbox/radio的值

    一直认为val()方法只有两个功能:1.能设置元素的值,2.获取元素的值.知道val()方法还有另外一个妙用,就是它能使select(下拉列表框).checkbox(多选框)和radio(单选框)相应 ...

  7. 警惕javascript代码中的“</script>”!

    之前在写<博客园自定义博客侧边栏公告的过滤漏洞>的时候遇到了一个javascript代码报错“语法错误”的问题,一直不得以解决,感谢Arliang发现了并为我进行了耐心的解释,现整理如下: ...

  8. linux下mysql数据库的学习

    转载博客:http://freedomljtt.blog.163.com/blog/static/72294949201210145441701/ ubuntu12.04 卸载和安装mysql 卸载m ...

  9. MVC中modelstate的使用

    MVC中ModelState类需要引用 System.Web.Mvc命名空间,在 System.Web.Mvc.dll 中. 属性 Errors 返回一个 ModelErrorCollection 对 ...

  10. <Stackoverflow> 如何提问

    如何提问 欢迎来到Stack Overflow! 我们很乐意帮助你,但是实际情况是并非每一个问题都能得到解决.为了提高你的机会,这儿有一些帮助: 1 检索及调查 在提出你的问题之前,你已经通过检索来寻 ...