2009-11-14 2 views
0

Tomcat에 배포 된 NetBeans에서 생성 된 JDBC를 사용하는 Java 웹 응용 프로그램에서 "java.sql.SQLException : No suitable driver 찾을 수 없습니다 ... "오류가 발생했습니다. 동일한 웹 응용 프로그램이 비 웹 Java 응용 프로그램으로 실행될 때 제대로 작동합니다. 내가 사용하고있는 JDBC 드라이버의 jar 파일이 웹 애플리케이션의 라이브러리에 추가되어있다.JDBC를 사용하는 배치 된 NetBeans 웹 응용 프로그램은 "java.sql.SQLException : 적절한 드라이버를 찾을 수 없음"을 제공합니다.

답변

0

해결책은 (SQL Server의 경우) DriverManager.registerDriver (새 com.microsoft.sqlserver.jdbc.SQLServerDriver())를 호출하는 것입니다. JDBC를 사용하기 전에 이것을 호출해야합니다. 적절한 JDBC 드라이버로이 메소드를 호출해야한다. 드라이버를 하드 코드하지 않으려면 Class.forName ("full.driver.name"). newInstance()를 사용할 수 있습니다. 이것은 아마도 NetBeans와 관련된 문제가 아니라 Tomcat/JDBC 문제 일 것입니다.

이것이 실제 솔루션보다 해결 방법이 더 많은 것처럼 보일 수 있습니다. 왜 웹 앱이 아닌 웹 앱이 아닌가?

+0

답변으로 표시했지만 BalusC의 답변에는 유용한 세부 정보가 있습니다. 그의 대답은 내 대답에 대한 답처럼 더 가깝다. –

0

Tomcat은 Tomcat 5.x의 경우 server/lib에서 6.x의 경우/lib에서 해당 JAR를 찾아야 할 수도 있습니다. 클래스 로더의 계층 구조는 부트 스트랩, 응용 프로그램 서버, WAR입니다. Tomcat 응용 프로그램 서버가 JDBC 드라이버 JAR을 찾으면 WAR에서 찾지 않습니다.

하지만 드라이버 클래스를 찾지 못하면 ClassNotFoundException이 발생합니다.

"java.sql.SQLException : 적합한 드라이버를 찾을 수 없습니다 ..."는 일반적으로 연결 URL에 구문 오류가 있음을 의미합니다. 먼저 확인해 보겠습니다. "웹 앱이 아닌 것처럼 잘 작동합니다."라고 속지 마십시오. 귀하의 웹 응용 프로그램이 다르다는 것을 알 수 있습니다. 권장되는 모범 사례 인 JNDI 연결 풀을 설정 한 경우 URL이 정확히 같지 않을 수 있습니다.

+0

Tomcat의 lib 디렉터리에 jar 파일을 넣으려고 시도했지만 도움이되지 않았습니다. 이 문제는 연결 URL 문제가 아닙니다. 자세한 내용은 BalusC의 게시물을 참조하십시오. –

2

은 java.sql.SQLException이 : 드라이버가로드되지

  1. : 없음 적합한 드라이버를 명확하게하기 위해

발견,이 예외는 원인이있을 수 있습니다.

  • (잘못된) URL이로드 된 드라이버에 대해 Driver#acceptsURL()에 대해 true을 반환하지 않았습니다. 이제 다시 실제로 솔루션입니다 당신의 "해결 방법"에
  • 이 더 진정한 솔루션보다 해결 방법처럼 보인다

    참고이가 웹 응용 프로그램에서이 아니라 필요한 이유 때문에 웹 앱이 아닌가요? DriverManager 클래스 경로에있는 JAR 파일의 서비스 로더에 definied 드라이버를 자동으로로드합니다 :

    JDBC4 새로운 기능이 있습니다. 이것은 Java6 환경에서만 작동합니다. 어쩌면 당신의 문제는 웹 서버가 Java5 JVM을 사용하고 있다는 것입니다.

    그러나 나는 항상 그것에 의지하지 않고 단지 Class#forName()을 사용합니다. 잘 설계된 DAO 레이어에서는이 작업을 한 번만 수행하면됩니다. 또는 더 나은 점은 웹 컨테이너가 데이터 소스를 관리하도록하여 연결 풀링의 이점을 활용할 수 있고 따라서 연결 성능을 크게 향상시킬 수 있습니다.

    Class.forName("full.driver.name").newInstance() 
    

    newInstance() 호출이 실제로 제대로에 필요한는 JDBC 드라이버를 설계되지 않은 : I에 대한 자세한

    한 오해를 취소합니다. 다음과 같이 괜찮은 JDBC 드라이버가 자신을 등록한다 : 나는 경우

    static { 
        DriverManager.registerDriver(new ThisDriver()); 
    } 
    

    을하지만, 잘못 설계된 JDBC 드라이버 (이 중 실제로 요즘 아무도가 없을 것, 이것은 MySQL의 JDBC 드라이버의 오래된 버전 중 하나에서 발생에만있다 따라서 정말 newInstance() 전화를 필요

    private ThisDriver() { 
        DriverManager.registerDriver(this); 
    } 
    

    자체가 등록 얻을 :) 올바른은 다음했다. 모든 사람들이 그렇게 권고 받았기 때문에 이것은 신화가되었습니다. 그건 필요 없어. 그냥 버려두면 불필요한 인스턴스 생성을 줄일 수 있습니다.

    희망이 도움이됩니다.

    관련 문제