SQL Server的JDBC驱动问题

最近公司换服务器把数据库从SQL Server 2005 升级到 SQL Server 2008。这样,以这个数据库对接的两个系统全部瘫痪,无法进行数据库对接。
首先立即判断是是数据库的驱动问题,好不容易从网上找到了了驱动,下载下来,发现里面有两个文件一个是sqljdbc.jar,另外一个是sqljdbc4.jar,于是将驱动换掉,两个全部导进去,加到CLASSPATH路径,发现,还是不行。两个系统分别出现以下错误:

Exception in thread “main” java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at com.peak.batch.commodityimport.CommodityInfoImport.importOrderInfo(CommodityInfoImport.java:649)
at com.peak.batch.commodityimport.CommodityInfoImport.main(CommodityInfoImport.java:108)

java.lang.UnsupportedOperationException: 此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。
at com.microsoft.sqlserver.jdbc.SQLServerConnection.(SQLServerConnection.java:223)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:840)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at com.epeaksport.imports.ImportStock.importGoods(ImportStock.java:73)
at com.epeaksport.imports.ImportStock.execute(ImportStock.java:35)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)

后来仔细看了帮助文档,发现以下这段话:

JAR 说明
sqljdbc.jar sqljdbc.jar 类库提供对 JDBC 3.0 的支持。sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。

注意注意:

JDBC Driver 2.0 不支持 JRE 1.4。使用 JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下,您可能需要重新编译应用程序,因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息,请参阅 Sun Microsystems 网站上的文档。

sqljdbc4.jar sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能,还包括新增的 JDBC 4.0 方法。sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。

注意注意:

如果应用程序必须在 JRE 6.0 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar

于是,明白,前一个去掉驱动JDBC4.JAR,后一个去掉JDBC.JAR,搞定。

JDBC,Jar包下载地址:

http://go.microsoft.com/fwlink/?LinkId=144635&clcid=0×804


2 Responses to “SQL Server的JDBC驱动问题”

  1. 小野 说:

    你好。对于您在文章中提到的“此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。”的问题,我也遇到类似的问题。你能具体的解释一下你的解决方法吗?Myeclipse下使用DBbrowser建立与SQLServer数据库连接时,无法直接选择sqljdbc4.jar包啊?

    • Huashui 说:

      @小野
      你好。如果你的系统用的java版本在1.5以及低于1.5,那么就用sqljdbc.jar,如果是1.6那就用sqljdbc4.jar。你在命令行里面输入javac -version看下版本
      Myeclipse里面默认使用的是自己的jdk,一般都是1.5,你用用jdbc.rar
      另外需要注意的是,一般Myeclipse使用的是1.5,而应用环境为1.6,此时要将驱动更换,因为两个版本的驱动写法一样,只需换驱动即可。

Post a Comment