2015-04-23 4 views
0

Не удается получить SQL, работающий в Java WebApp, над которым я работаю. Кажется, проблема связана с трикотажем, не загружающим мой SQL-драйвер.Java + Jersey + Gradle - java.sql.SQLException: Не найдено подходящего драйвера

Получение java.sql.SQLException: Не найдено подходящего драйвера для jdbc: h2: testDbName, когда я вызываю свою конечную точку.

Обратите внимание, что:

  1. строка подключения действует и работает, когда не работают в контейнер сервлетов.

  2. Gradle скрипт настроен правильно установить sqldriver (h2 в этом случае ) в Lib каталоге

я упростил код к следующему:

TestResource.java

@Path("/user") 
public class TestResource { 

    @POST 
    @Path("/add") 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public Response createForm(@FormParam("name") String name) throws Exception{ 

     Connection connection = DriverManager.getConnection("jdbc:h2:testDbName"); 
     connection.close(); 

     return Response.status(SC_ACCEPTED).build(); 
    } 
} 

build.gradle

apply plugin: 'war' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'javax.servlet:servlet-api:2.5' 
    compile "javax.ws.rs:jsr311-api:1.1.1" 
    compile 'com.sun.jersey:jersey-bundle:1.19' 

    compile 'com.h2database:h2:1.3.175' 
} 

webapp.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 

    <servlet> 
     <servlet-name>Jersey</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>testPackage</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

</web-app> 
+1

Попробуйте явно загрузки драйвера и посмотреть, что происходит 'Class.forName ("org.h2.Driver")' –

+0

Да, что установил его - я поставил статическую { DriverManager.registerDriver (новый org.h2 .Driver()) } в мой код .. Кажется очень вонючим, хотя – vicsz

+0

@vicjugador почему вонючий? Вот как это работает в java, вам нужно загрузить драйвер. – Opal

ответ

0

Согласно peeskillet, явно загрузки драйвера исправили проблему.

@Path("/user") 
public class TestResource { 

    static{ DriverManager.registerDriver(new org.h2.Driver()) } 

    @POST 
    @Path("/add") 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public Response createForm(@FormParam("name") String name) throws Exception{ 

     Connection connection = DriverManager.getConnection("jdbc:h2:testDbName"); 
     connection.close(); 

     return Response.status(SC_ACCEPTED).build(); 
    } 
} 
Смежные вопросы