2014-11-06 93 views
0

我有一個非常簡單的寧靜的web服務,我想從數據庫訪問數據。不幸的是我總是得到這個例外:在寧靜的web服務中訪問mysql jdbc驅動

SCHWERWIEGEND: Servlet.service() for servlet [Jersey REST Service] in context with path [/test_projects] threw exception [org.glassfish.jersey.server.ContainerException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test_projects] with root cause java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test_projects 

我在Web服務中的資源類看起來像這樣。

package ws; 

import java.sql.SQLException; 

import javax.ws.rs.Path; 
import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 

import model.Person; 

import com.google.gson.Gson; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

@Path("/persons") 
public class PersonsResource { 

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost/zhaw_projects"; 

    static final String USER = "root"; 
    static final String PASS = ""; 

    @GET 
    // produce json 
    @Produces("application/json") 
    public String getPersonJSON() throws SQLException { 

     // build connection 
     Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); 

     // create statement 
     Statement statement = connection.createStatement(); 

     // select query 
     String personsQuery = "SELECT * FROM persons"; 

     // execute query 
     ResultSet rs = statement.executeQuery(personsQuery); 

     // a list of persons 
     List<Person> persons = new ArrayList<Person>(); 

     // add persons 
     while (rs.next()) { 

      persons.add(new Person(rs.getInt("personID"), rs 
        .getString("firstName"), rs.getString("lastName"), rs 
        .getString("token"), rs.getString("email"))); 
     } 

     // new json string with the persons list 
     Gson gson = new Gson(); 
     String jsonString = gson.toJson(persons); 

     return jsonString; 
    } 
} 

而且我的web.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>ws</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

我使用Apache Tomcat作爲web服務器。我的JDBC驅動程序目前在我的WebContent/WEB_INF/lib目錄中。我需要將jdbc驅動程序用於何種工作?

+0

儘量把它放在你的tomcat'lib'目錄 – Jens 2014-11-06 13:19:57

+0

你添加** MySQL連接罐子**在類路徑中的庫** – 2014-11-06 13:20:50

+0

我已經嘗試過兩種方法,它仍然無法正常工作。 – LDC 2014-11-06 13:32:05

回答

1

我想通了。我不得不把

Class.forName(JDBC_DRIVER); 

我的代碼。

0

ü沒有在DB_URL 添加端口號,如JDBC的:mysql://本地主機:3306/zhaw_projects