&引用;NoClassDefFoundError:javax/xml/bind/DatatypeConverter";使用SQL Server JDBC

&引用;NoClassDefFoundError:javax/xml/bind/DatatypeConverter";使用SQL Server JDBC,java,sql,intellij-idea,jdbc,mssql-jdbc,Java,Sql,Intellij Idea,Jdbc,Mssql Jdbc,我最近切换到intellij,但我发现很难连接到我的localDB。同样的代码在eclipse上工作得很好另外,我已经添加了sqljdbc42.jar作为模块依赖项。 package com.enter; import java.sql.*; public class SqlConnect { private String username, password, url; public Connection conn; public SqlConnect() {

我最近切换到intellij,但我发现很难连接到我的localDB。同样的代码在eclipse上工作得很好另外,我已经添加了sqljdbc42.jar作为模块依赖项。

package com.enter;
import java.sql.*;

public class SqlConnect {
    private String username, password, url;
    public Connection conn;

    public SqlConnect() {
        username = "user=admin;";
        password = "password=admin";
        url = "jdbc:sqlserver://Bossman-PC\\SQL2014TRAINING;databaseName=EnterDB;";
        Connect();
    }
    public SqlConnect(String user, String pass) {
        username = user;
        password = pass;
        url = "jdbc:sqlserver://Bossman-PC\\SQL2014TRAINING;databaseName=EnterDB;";
        Connect();
    }

    public void Connect() { //Loads sql driver and creates a connection object with local database
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = url + username + password;
            conn = DriverManager.getConnection(connectionUrl);
            System.out.println("Connected.");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() {
        return conn;
    }


}
产生的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:252)
at com.enter.SqlConnect.Connect(SqlConnect.java:25)
at com.enter.SqlConnect.<init>(SqlConnect.java:12)
at com.enter.Login.makeConnection(Login.java:26)
at com.enter.Login.<init>(Login.java:16)
at com.enter.Execute.initLogin(Execute.java:14)
at com.enter.Execute.main(Execute.java:9)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 19 more

Process finished with exit code 1
线程“main”java.lang.NoClassDefFoundError中出现异常:javax/xml/bind/DatatypeConverter 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123) 位于com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.connectioninternal(SQLServerConnection.java:1459) 位于com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773) 位于com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168) 位于java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678) 位于java.sql/java.sql.DriverManager.getConnection(DriverManager.java:252) 在com.enter.SqlConnect.Connect(SqlConnect.java:25) 在com.enter.SqlConnect.(SqlConnect.java:12) 在com.enter.Login.makeConnection(Login.java:26) 在com.enter.Login.(Login.java:16) 在com.enter.Execute.initLogin(Execute.java:14) 在com.enter.Execute.main(Execute.java:9) 原因:java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) 位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) 位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) ... 还有19个 进程已完成,退出代码为1
任何帮助都将不胜感激。我还尝试了重载DriverManager.getConnection(url、user、pass)方法,但出现了相同的错误。

对于Java 9+兼容性,您需要使用版本6.4.0或更高版本,以用于jreXX版本后缀标识的Java版本。使用最高版本(低于或等于Java版本)


先前的答复 正如Microsoft在上所述:

目前,我们的驱动程序发布的JAR都与JDK9不兼容


您可以切换到使用Java 8 JDK,也可以将Microsoft的“JDBC4.3”分支中的开发代码合并到您的项目中,并将其与Java 9 JDK一起使用。

如果包含额外的jvm参数,则可以实现这一点

--add-modules=java.se.ee
在Intellij中的跑步配置中,哪一个会出现在这里

这包括几个模块,这些模块在java 9中已被标记为不推荐使用,以便将来删除,因此这些模块可以在java 10中删除,因此在Microsoft发布与java 9兼容的jdbc驱动程序之前,它实际上只是一个临时解决方案


有关这方面的更多信息可以在

中找到,您最近是否也使用了Java 9?Intellij使用了哪种编译器?当我切换到Intellij时,我的项目语言级别总是设置为1.5。打开模块设置并更改为正确的语言级别应该会有所帮助。是的,我将java 9 JDK和sqljdbc42作为模块依赖项。@haifzhan使用的是语言级别9,也尝试了语言级别8。两者都无法工作,但仍会收到相同的错误消息。这是一个项目视图,您是否使用JDK 9作为模块/项目JDK?非常感谢。无论(将语言模式更改为8),Java9JDK都无法工作。切换到Java8JDK后,JDK工作正常。谢谢。戈尔。如何将MS在的开发代码转换成.jar文件?@Ethan-在GitHub发布的文章中提供了jar。他们还提到,我们应该能够使用Maven(
mvn install
)构建JAR。@GordThompson我更新了您的答案,包括已经提供了Java 9+版本。我希望你不介意。它告诉我:java.lang.module.FindException:module java.se.ee未找到