2017-11-21 1 views
3

최근에 intellij로 전환했지만 localDB에 연결하는 것이 어렵습니다. 같은 코드가 일식 잘 작동했습니다. 또한 모듈 종속성으로 sqljdbc42.jar를 이미 추가했습니다. 생산"NoClassDefFoundError : javax/xml/bind/DatatypeConverter"with SQL Server JDBC

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) 메서드와 같은 오류를 시도했습니다.

+0

에서 찾을 수 있습니까? –

+0

컴파일러가 Intellij를 사용 했습니까? Intellij로 전환하면 내 프로젝트 ** 언어 수준 **이 항상 1.5로 설정됩니다. ** 모듈 설정 **을 열고 올바른 언어 수준으로 변경하면 도움이됩니다. – haifzhan

+0

예 모듈 종속성으로 Java 9 JDK 및 sqljdbc42가 있습니다. –

답변

4

GitHub에 Microsoft에서 언급 한 바와 같이 :

Currently none of our driver released Jars are compatible with JDK9.

당신은 자바 (8) JDK를 사용하도록 전환 할 수 있습니다, 또는 당신은 당신의 프로젝트 및 사용에 자신의 'JDBC4.3'지점에서 마이크로 소프트의 개발 코드를 통합 할 수 Java 9 JDK를 사용합니다.

는 당신이 인 IntelliJ에서 실행 구성 여기에 갈 것

--add-modules=java.se.ee 

여분의 JVM 매개 변수를 포함하는 경우 작동이 얻을 수

+0

정말 고마워요. Java 9 JDK가 관계없이 작동하지 않습니다 (언어 모드를 8 개로 변경). Java 8로 전환 JDK는 아무런 질문도하지 않았습니다. –

+0

감사. Gord. 어떻게 MS의 개발 코드를 https://github.com/Microsoft/mssql-jdbc/tree/JDBC4.3?files=1에서 .jar 파일로 만들 수 있습니까? –

+0

@Ethan - GitHub 문제 (https://github.com/Microsoft/mssql-jdbc/issues/549#issuecomment-348312186)의 게시물에서 사용할 수있는 병이 있습니다. 또한 Maven ('mvn install')을 사용하여 항아리를 만들 수 있어야한다고 언급했습니다. –

2

enter image description here

이 다음 몇 가지 모듈을 포함하는 Java 9는 향후 제거를 위해 deprecated로 표시되어 있으므로 Java 10에서 제거 될 수 있으므로 Microsoft가 Java 9 호환 jdbc 드라이버를 릴리스 할 때까지는 실제로 임시 해결책입니다. 이에

는 최근 자바 (9)를 사용하여 전환 한 기회함으로써 Java9 Migration guide

관련 문제