[postgresql] 악명 높은 java.sql.SQLException : 적합한 드라이버가 없습니다.

기존 Tomcat 5.5 응용 프로그램 (도움이되는 경우 GeoServer 2.0.0)에 데이터베이스 사용 JSP를 추가하려고합니다.

앱 자체는 Postgres와 잘 대화하므로 데이터베이스가 작동하고 사용자가 액세스 할 수 있다는 것을 알고 있습니다. 내가하려는 것은 내가 추가 한 JSP의 데이터베이스 쿼리입니다. 나는 Tomcat 데이터 소스 예제 의 구성 예제 거의 즉시 사용했습니다. 필수 taglib가 올바른 위치에 있습니다. taglib 참조 만 있으면 오류가 발생하지 않으므로 해당 JAR을 찾습니다. postgres jdbc 드라이버 인 postgresql-8.4.701.jdbc3.jar은 $ CATALINA_HOME / common / lib에 있습니다.

JSP의 상단은 다음과 같습니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/mmas">
  select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>

$ CATALINA_HOME / conf / server.xml의 관련 섹션은 <Host>다음과 <Engine>같습니다.

<Context path="/gs2" allowLinking="true">
  <Resource name="jdbc/mmas" type="javax.sql.Datasource"
      auth="Container" driverClassName="org.postgresql.Driver"
      maxActive="100" maxIdle="30" maxWait="10000"
      username="mmas" password="very_secure_yess_precious!"
      url="jdbc:postgresql//localhost:5432/mmas" />
</Context>

다음 행은 webapps / gs2 / WEB-INF / web.xml의 태그에서 마지막입니다.

<resource-ref>
  <description>
     The database resource for the MMAS PostGIS database
  </description>
  <res-ref-name>
     jdbc/mmas
  </res-ref-name>
  <res-type>
     javax.sql.DataSource
  </res-type>
  <res-auth>
     Container
  </res-auth>
</resource-ref>

마지막으로 예외 :

   exception
    org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
    [...wads of ensuing goo elided]



답변

악명 높은 java.sql.SQLException : 적합한 드라이버가 없습니다.

이 예외는 기본적으로 두 가지 원인 이있을 수 있습니다 .

1. JDBC 드라이버가로드되지 않았습니다.

JDBC 드라이버가 서버의 자체 /lib폴더 에 있는지 확인해야 합니다.

또는 실제로 서버 관리 연결 풀 데이터 소스를 사용하지 않고 DriverManager#getConnection()WAR에서 수동으로 조작 하는 경우 JDBC 드라이버를 WAR에 배치하고 /WEB-INF/lib..

Class.forName("com.example.jdbc.Driver");

.. 첫 번째 호출 전에 코드에서 던질 수있는 것을 삼키거나 무시 DriverManager#getConnection()하지 않도록ClassNotFoundException 하고 예외가없는 것처럼 코드 흐름을 계속합니다. Tomcat의 연결 풀을위한 JDBC 드라이버를 어디에 배치해야합니까?를 참조하십시오 .

2. 또는 JDBC URL의 구문이 잘못되었습니다.

JDBC URL이 JDBC 드라이버 문서를 준수하는지 확인하고 일반적으로 대소 문자를 구분한다는 점에 유의해야합니다. 로드 된 드라이버 trueDriver#acceptsURL()대해 JDBC URL이 반환되지 않으면 정확히이 예외가 발생합니다.

PostgreSQL의 경우 여기 에 설명되어 있습니다 .

JDBC에서 데이터베이스는 URL (Uniform Resource Locator)로 표시됩니다. PostgreSQL ™에서는 다음 형식 중 하나를 사용합니다.

  • jdbc:postgresql:database
  • jdbc:postgresql://host/database
  • jdbc:postgresql://host:port/database

MySQL의 경우 여기 에 문서화되어 있습니다 .

MySQL 서버에 연결하기위한 JDBC URL의 일반적인 형식은 다음과 같으며 대괄호 ( [ ]) 안의 항목 은 선택 사항입니다.

jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] »
[?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

Oracle의 경우 여기 에 설명되어 있습니다 .

2 개의 URL 구문, SID에서만 작동하는 이전 구문과 Oracle 서비스 이름에서 새로운 구문이 있습니다.

이전 구문 jdbc:oracle:thin:@[HOST][:PORT]:SID

새로운 구문 jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE


또한보십시오:


답변

url="jdbc:postgresql//localhost:5432/mmas"

URL이 잘못된 것 같습니다. 다음이 필요합니까?

url="jdbc:postgresql://localhost:5432/mmas"


답변

내 프로젝트 ( Mvnrepository )에 PostgreSQL JDBC 드라이버를 추가하는 것을 잊었습니다 .

Gradle :

// http://mvnrepository.com/artifact/postgresql/postgresql
compile group: 'postgresql', name: 'postgresql', version: '9.0-801.jdbc4'

메이븐 :

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.0-801.jdbc4</version>
</dependency>

JAR을 다운로드 하고 수동으로 프로젝트로 가져올 수도 있습니다.


답변

비슷한 문제에 직면했습니다. 내 프로젝트는 Dynamic Web Project (Java 8 + Tomcat 8)이고 오류는 PostgreSQL 드라이버 예외 : 적합한 드라이버가 없습니다 .

메서드 Class.forName("org.postgresql.Driver")를 호출하기 전에 추가하여 해결되었습니다.getConnection()

내 샘플 코드는 다음과 같습니다.

try {
            Connection conn = null;
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection("jdbc:postgresql://" + host + ":" + port + "/?preferQueryMode="
                    + sql_auth,sql_user , sql_password);
        } catch (Exception e) {
            System.out.println("Failed to create JDBC db connection " + e.toString() + e.getMessage());
        }


답변

Tomcat에서이 문제를 제거하는 데 도움이되는 다음 팁을 찾았습니다.

먼저 Class.forName ( “org.postgresql.Driver”);을 수행하여 드라이버를로드해야합니다. 귀하의 코드에서.

이것은 게시물에서 가져온 것입니다-https: //www.postgresql.org/message-id/e13c14ec050510103846db6b0e@mail.gmail.com

jdbc 코드는 독립 실행 형 프로그램으로 잘 작동했지만 TOMCAT에서는 ‘적합한 드라이버를 찾을 수 없음’오류가 발생했습니다.


답변

Windows가 안전하지 않은 것으로 간주되는 다운로드를 차단할 때도 발생할 수 있습니다. jar 파일 (예 : ojdbc7.jar)을 마우스 오른쪽 버튼으로 클릭하고 하단의 ‘차단 해제’상자를 선택하면이 문제를 해결할 수 있습니다.

Windows JAR 파일 속성 대화 상자 :
Windows JAR 파일 속성 대화 상자


답변

MySQL JDBC 커넥터를 추가 할뿐만 아니라 DB 연결 정의와 함께 context.xml (Tomcat webapps 폴더에 압축 해제되지 않은 경우)이 Tomcats conf 디렉터리에 포함되어 있는지 확인합니다.