web-dev-qa-db-ja.com

SQL Server JDBCを使用した「NoClassDefFoundError:javax / xml / bind / DatatypeConverter」

最近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

どんな助けでも大歓迎です。オーバーロードされたDriverManager.getConnection(url、user、pass)メソッドも試しましたが、同じエラーが発生しました。

4
J.Johnson

Java 9+互換性の場合、jreXXバージョンサフィックスで識別されるJavaバージョンを使用するには、バージョン6.4.0以降を使用する必要があります。あなた以下の最高バージョンJavaバージョン)。


前の答え

Microsoftが GitHub で述べたように:

現在、ドライバーがリリースしたJarはいずれもJDK9と互換性がありません。

Java 8 JDKの使用に切り替えるか、Microsoftの開発コードを 'JDBC4.3'ブランチからプロジェクトに組み込んで、それをJava 9JDK。

5
Gord Thompson

追加のjvmパラメーターを含めると、これを機能させることができます

--add-modules=Java.se.ee

Intellijでの実行構成のどれがここに行きますか

enter image description here

これには、Java 9で将来の削除のために非推奨としてマークされているため、Java 10で削除できるため、実際には一時的なものにすぎません。 MicrosoftがリリースするまでのソリューションJava 9互換のjdbcドライバー。

これについての詳細は Java9移行ガイド にあります。

3
Java Devil