2013-05-19 2 views
0

정말 여기 미스테리가 있습니다. 이클립스에서 Java 프로그램을 만들고 JDBC 연결을 만들었다.JDBC 연결은 IDE (Eclipse)에서 작동하지만 .jar 파일에서는 작동하지 않습니다.

import java.sql.*; 

public class Login { 

    public static void main(String[] args) { 
     try { 
      // Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection connection = DriverManager 
        .getConnection("jdbc:sqlserver://localhost;databaseName=testdb; integratedSecurity=true;"); 
            //adding port 1433 doesn't make a difference 

      System.out.println("Connection successful"); 
      Statement st = connection.createStatement(); 
      ResultSet rs = st.executeQuery("select * from testtable"); 

      while (rs.next()) { 
       line = rs.getString(2); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

나는 이클립스를 실행 해요, 모든 게 잘 : 코드는 다음과 같다. 데이터베이스와 테이블이 양호하고 라이브러리 및 인증이 Java 빌드 경로으로 설정되어 있고 내가 원하는 결과, 즉 "Hello World"가 선택된 테이블의 문자열입니다.

그러나 실행 가능한 JAR 파일을 만들고 실행하면 "이 드라이버는 통합 인증"으로 예외가 발생합니다. 심지어 연결되지도 않으므로 데이터베이스에 오류가 있어도이 시점에서는 문제가되지 않습니다.

사실 더 혼란 스럽습니다. 몇 주 일찍, 실행 가능한 JAR 파일도 만들었습니다.

OS : 윈도우 비스타 홈 프리미엄 86

JDBC 드라이버 위치 : "C : \ sqljdbc_4.0 \ ENU \ sqljdbc4.jar"

네이티브 라이브러리 위치 : "C : \ sqljdbc_4.0 \ ENU \ 인증 \ 86 "

Java 버전 : 자바 7 업데이트 17, JDK 7 업데이트 (17)

이전 버전에서는 Update 21을 사용했지만 드라이버가 이유인지 점검하기 위해 다시 변경되었습니다.

그래서 어떤 제안이 필요합니까? 나는 매우 감사 할 것입니다!

+2

"java.library.path"시스템 속성을 sqljdbc_auth.dll의 위치로 설정 했습니까? – happymeal

+0

* "SSCCE가되기를 바랍니다"* - 다른 사람들이 문제를 재현 할 수 있습니까? 그렇지 않은 경우 SSCCE가 아닙니다. –

+0

병을 어떻게 실행합니까? –

답변

2
  • eclipse의 런타임 클래스 경로를 확인한 다음 시스템 레벨 "CLASSPATH"변수를 작성하고 동일한 경로를 추가하십시오. 변수가 설정되면, 새 명령 프롬프트를 실행하거나

  • 이 실행 항아리 (MainClass와 함께)에 필요한 모든 항아리에 MANIFEST.MF에 의존 마지막으로

  • 이 있는지 확인 환경 변수를 다시로드 그것은 (대신 "로그인"의 "로그인") 자본의 첫 알파벳을 만드는 자바 연습은 항상

+1

"CLASSPATH"와 관련해서는 무엇을해야할지 모르겠습니다. 나는 매우 자주 "CLASSPATH 설정"을 읽었지만 아무도 방법과 위치를 설명하지 않습니다 ... 그리고 위의 코드는 SSCCE 여야합니다. 사실, GUI를 만들고있어, 결과를 GUI가 아닌 명령 줄에서보고 싶습니다. 마지막으로 MANIFEST.MF를 설정할 수있는 실마리가 없습니다. 그래서 중요한 일을 놓친 것 같습니다. 또는 내가 한 일을 모른 채 물건을 설정했습니다. 저 한테 몇 가지 힌트를 주시겠습니까? – Stacky

+0

명령 프롬프트에서'set CLASSPATH'를 사용하거나 컴퓨터 -> 등록 정보 -> 고급 시스템 설정 -> 환경 변수에서 환경 (시스템) 변수를 설정할 수 있습니다. – Chris

+0

관리자가 아닌 관리자로 클래스 경로를 설정할 수 있습니까? 이 프로그램은 내 대학의 컴퓨터에서 실행해야하므로 매우 중요 할 수 있습니다. – Stacky

0

실제 문제는 이클립스에서 프로젝트를 실행하면 자동으로 실행 인수를 추가하는 것입니다 run/run config/arguments에 정의되어 있으므로 제대로 설정된 프로그램을 실행해야합니다. sqljdbc_auth.dll의 경로. 그러나 응용 프로그램을 .jar 파일로 내보내고 방금 실행하면 인증 파일에 올바른 클래스 경로가 없기 때문에 이러한 오류가 발생합니다.

따라서 올바른 인수를 사용하여 명령 줄에서 앱을 실행하는 경우 제대로 작동해야합니다.

+0

GUI 프로젝트입니다. 사용자가 클릭하여 실행해야하는 jar 파일입니다. 그래서 발사 논증을 추가 할 수있는 방법이 없습니다. – Stacky

관련 문제