最近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)メソッドも試しましたが、同じエラーが発生しました。
Java 9+互換性の場合、jreXXバージョンサフィックスで識別されるJavaバージョンを使用するには、バージョン6.4.0以降を使用する必要があります。あなた以下の最高バージョンJavaバージョン)。
Microsoftが GitHub で述べたように:
現在、ドライバーがリリースしたJarはいずれもJDK9と互換性がありません。
Java 8 JDKの使用に切り替えるか、Microsoftの開発コードを 'JDBC4.3'ブランチからプロジェクトに組み込んで、それをJava 9JDK。
追加のjvmパラメーターを含めると、これを機能させることができます
--add-modules=Java.se.ee
Intellijでの実行構成のどれがここに行きますか
これには、Java 9で将来の削除のために非推奨としてマークされているため、Java 10で削除できるため、実際には一時的なものにすぎません。 MicrosoftがリリースするまでのソリューションJava 9互換のjdbcドライバー。
これについての詳細は Java9移行ガイド にあります。