最近公司换服务器把数据库从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
注意:
你好。对于您在文章中提到的“此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。”的问题,我也遇到类似的问题。你能具体的解释一下你的解决方法吗?Myeclipse下使用DBbrowser建立与SQLServer数据库连接时,无法直接选择sqljdbc4.jar包啊?
@小野
你好。如果你的系统用的java版本在1.5以及低于1.5,那么就用sqljdbc.jar,如果是1.6那就用sqljdbc4.jar。你在命令行里面输入javac -version看下版本
Myeclipse里面默认使用的是自己的jdk,一般都是1.5,你用用jdbc.rar
另外需要注意的是,一般Myeclipse使用的是1.5,而应用环境为1.6,此时要将驱动更换,因为两个版本的驱动写法一样,只需换驱动即可。