com/microsoft/sqlserver/jdbc/SQLServerDriver 已由更新版本的 Java 运行时编译

问题描述 投票:0回答:3

我在 MS SQL Server 2005 中有数据库

我在 java 8 上编写了 java 项目。我的项目位于 Windows 7 Professional 的机器(64 位)

我使用这个 jar:

sqljdbc4.jar
连接到 MS SQL Server 2005

但是当我启动我的应用程序时,我收到错误:

 [java] log4j: setFile ended
 [java] log4j: Appender [File] to be rolled at midnight.
 [java] log4j: Adding appender named [File] to category [root].
 [java] [25.05.2019 15:11:44.979] com.myproject.common.LNFSetter.setLNF(LNFSetter.java:60) TRACE:
 [java]     lookAndFeelName=Windows
 [java]     lookAndFeelClassName=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
 [java] Exception in thread "main" java.lang.UnsupportedClassVersionError: com/microsoft/sqlserver/jdbc/SQLServerDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
 [java]     at java.lang.ClassLoader.defineClass1(Native Method)
 [java]     at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
 [java]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 [java]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
 [java]     at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
 [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
 [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
 [java]     at java.security.AccessController.doPrivileged(Native Method)
 [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
 [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
 [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 [java]     at java.lang.Class.forName0(Native Method)
 [java]     at java.lang.Class.forName(Class.java:264)
 [java]     at com.myproject.db.DBManagerContext.initConnection(DBManagerContext.java:69)
 [java]     at com.myproject.db.DBManagerContext.initialize(DBManagerContext.java:94)
 [java]     at com.myproject.db.DBManagerContext.<init>(DBManagerContext.java:102)
 [java]     at com.myproject.db.DBManagerContext.getInstance(DBManagerContext.java:115)
 [java]     at com.myproject.common.SystemOptions.getDBManagerContext(SystemOptions.java:382)
 [java]     at com.myproject.m2document.M2DocumentManager.initialize(M2DocumentManager.java:42)
 [java]     at com.myproject.m2document.M2DocumentManager.<init>(M2DocumentManager.java:60)
 [java]     at com.myproject.m2document.M2DocumentManager.getInstance(M2DocumentManager.java:35)
 [java]     at com.myproject.views.ca.scroller.AccountsScroller.init(AccountsScroller.java:182)
 [java]     at com.myproject.views.ca.scroller.AccountsScroller.<init>(AccountsScroller.java:160)
 [java]     at com.myproject.views.ca.MainScreenView.<init>(MainScreenView.java:103)
 [java]     at com.myproject.Main.<init>(Main.java:42)
 [java]     at com.myproject.Main.main(Main.java:54)

这是我的应用程序的片段:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
    private void initConnection(String suffixURL) throws ClassNotFoundException, SQLException {
            String driverName = UserOptions.getOptionsDBDriverName();
            Class.forName(driverName); // ERROR IN THIS LINE
            String url = null;
            String databaseType = UserOptions.getOptionsDBURLType();
            String host = UserOptions.getOptionsDBURLHost();
            String port = UserOptions.getOptionsDBURLPort();
            String databaseName = UserOptions.getOptionsDBURLName();
            if (suffixURL == null) {
                url = UserOptions.getOptionsAdditionalDBURL(databaseType, host, port, databaseName);
            } else {
                url = suffixURL;
            }
                String userName = UserOptions.getOptionsDBUserName();
            String password = UserOptions.getOptionsDBPassword();
            connection = DriverManager.getConnection(url, userName, password);

        }

此行错误:

Class.forName(driverName); // ERROR IN THIS LINE

评论:

driver name=com.microsoft.sqlserver.jdbc.SQLServerDriver

附注我无法升级到jdk 9。我只能使用jdk 8

sql-server-2005 java-8 jdbc-odbc
3个回答
1
投票

我通过搜索引擎为新人写了答案。

线程“main”java.lang.UnsupportedClassVersionError中出现异常: com/microsoft/sqlserver/jdbc/SQLServerDriver 已由 更新版本的 Java 运行时(类文件版本 55.0),

表示

.jar
文件是用比您计算机上的 Java 版本更新的版本编译的。

此版本的 Java 运行时仅识别最高 52.0 的类文件版本

表示您的计算机的 Java 级别较低,如下表所示。您应该升级您的 Java 或从 here 选择适当版本的 Mssql java 文件。

Java SE 18  62  003e
Java SE 17  61  003d
Java SE 16  60  003c
Java SE 15  59  003b
Java SE 14  58  003a
Java SE 13  57  0039
Java SE 12  56  0038
Java SE 11  55  0037
Java SE 10  54  0036
Java SE 9   53  0035
Java SE 8   52  0034
Java SE 7   51  0033
Java SE 6   50  0032
Java SE 5   49  0031
JDK 1.4     48  0030
JDK 1.3     47  002f
JDK 1.2     46  002e
JDK 1.1     45  002d

在我执行了有问题的方法后,我得到了结果。


0
投票

如果您使用maven,只需降低依赖项中jar的版本即可。 尝试将其添加到您的 pom 文件中:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.2.0.jre8</version>
</dependency>

-1
投票

我尝试了上述方法,升级到12.2.0.jre8版本和降级到10.2.0.jre8均失败。你能帮我吗?

© www.soinside.com 2019 - 2024. All rights reserved.