2016-11-03 36 views
0

我遇到了一個問題,我一直在試圖找出了天:的Java JDBC連接到動態Web應用程序

我說我的司機:使用mysql-connector-java的5.1.40.jar到構建路徑。 web-inf lib文件夾,apache tomcat lib文件夾。而且我在網上應用程序庫中有它。

但是,當我只是運行一個主類並運行它的作品,這是與網絡應用程序有關?

這是我的代碼:

這是servlet類,我用它來連接到我的數據庫

package sql; 

import java.io.IOException; 
import java.sql.SQLException; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class RegisterServlet 
*/ 
@WebServlet("/register") 
public class RegisterServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private DbUtil sql = new DbUtil(); 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public RegisterServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String email = request.getParameter("email"); 

     String username = request.getParameter("username"); 

     String password = request.getParameter("password"); 


     if (sql.addToAccountToDatabase(username, password, email)) { 



      System.out.println("Gongratz"); 

     } else { 

      System.out.println("mhhh ?"); 
     } 








    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 


} 

這是第二類如何使連接

package sql; 

import java.sql.*; 

public class DbUtil { 

    public Connection getConnection() { 

     Connection connect = null; 

     try { 

      String url = "jdbc:mysql://hidden:3306/hidden"; 

      connect = DriverManager.getConnection(url, "hidden", "hidden"); 
      return connect; 

     } catch (Exception e) { 

      System.out.println("Cannot connect to database"); 
      e.printStackTrace(); 

     } 

     return connect; 

    } 

    public boolean addToAccountToDatabase(String username, String password, String email) { 

     try { 

      String query = "INSERT INTO Account (username, password, email) VALUES (?, ?,?)"; 
      PreparedStatement pStat = getConnection().prepareStatement(query); 
      pStat.setString(1, username); 
      pStat.setString(2, password); 
      pStat.setString(3, email); 
      pStat.executeUpdate(); 
      return true; 

     } catch (Exception e) { 

      System.out.println("User already exists"); 

      e.printStackTrace(); 
      return false; 

     } 

    } 

} 

我得到這個錯誤:

Cannot connect to database 
java.sql.SQLException: No suitable driver found for jdbc:mysql://192.185.227.214:3306/ratekas9_illegalminds 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at sql.DbUtil.getConnection(DbUtil.java:15) 
    at sql.DbUtil.addToAccountToDatabase(DbUtil.java:34) 
    at sql.RegisterServlet.doPost(RegisterServlet.java:40) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
User already exists 
java.lang.NullPointerException 
    at sql.DbUtil.addToAccountToDatabase(DbUtil.java:34) 
    at sql.RegisterServlet.doPost(RegisterServlet.java:40) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
mhhh ? 
+0

將您的jdbc驅動程序jar放入服務器lib文件夾中。 ($ CATALINA_HOME/lib)在Tomacat的情況下。 – Nishh

+0

它已被添加 –

+0

它現在工作嗎? – Nishh

回答

1

因爲字符串「jdbc:mysql」不聲明驅動程序類本身,而只聲明潛在驅動程序註冊的名稱。您必須強制JVM在啓動JDBC連接之前加載驅動程序類:

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

+1

在這種情況下,這是真的,因爲MySQL Connector/J是分開的部署應用程序而不是Tomcat作爲一個整體,但通常使用'Class.forName'來加載驅動程序不再是必要的。 –

0

您需要3個步驟來解決問題:

  1. 連接之前Class.forName("com.mysql.jdbc.Driver");
  2. 增加「JConnector.jar」這段代碼添加到您的項目和構建路徑。
  3. 不要嘗試輸入同一個人,因爲堆棧跟蹤中存在錯誤「用戶已經存在」。
0

添加JAR文件到您的CLASSPATH(編譯需求)/項目的構建路徑,並根據項目的WEB-INF/lib文件夾中(運行時的參考,即,當你將應用程序部署到應用服務器)。如需進一步參考,請通過這個link

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

這不再需要按照官方的Java文檔here,但它是一個必不可少的步驟,如果你正在使用JDBC 4.0之前的版本。

This問題可以爲您提供很多關於這方面的詳細信息。

希望所有這些細節都能幫助您解決您的問題!

+1

如果驅動程序是部署的應用程序的一部分,而不是Tomcat系統類路徑,則還需要使用'Class.forName'。 –

相關問題