簡體   English   中英

無法連接到JSP中的數據庫

[英]Cannot connect to database in jsp

我正在嘗試在jsp頁面中學習數據庫連接。 這是我的代碼:

這是我的servlet:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();

    out.println("servlet");

    String username=request.getParameter("username"), password=request.getParameter("password");
    out.println("Username: "+username+" Password: "+password);

    CheckUser(username,password);
}

protected void CheckUser(String username, String password)
{
    dbConnect.connect();

}

這是我的dbConnect類:

import java.sql.DriverManager;

import com.mysql.jdbc.Connection;


public class dbConnect {

  static String dbUrl="jdbc:mysql://localhost:3306/Bank";
  String username="root";
  String password="";

  static Connection con=null;

  public static void connect()
  {
      try {
       Class.forName("com.mysql.jdbc.Driver").newInstance();
       con=(Connection) DriverManager.getConnection(dbUrl);
       System.out.println("Connected!");

      } 
      catch (Exception e) {

          System.out.println("not connected");

      }
  }

}

問題是在connect()函數中,涉及到Class.forName(“ com.mysql.jdbc.Driver”)。newInstance();行。 它產生一個錯誤並進入catch塊。 這是怎么回事,任何人都可以幫忙嗎? 謝謝。

編輯 :我做了Nambari所說的,現在我在con =(Connection)DriverManager.getConnection(dbUrl);行中得到了錯誤 這是一個例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Util.getInstance(Util.java:336)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2938)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:855)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3337)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1930)
at com.mysql.jdbc.Connection.<init>(Connection.java:716)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Connection.getInstance(Connection.java:295)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at dbConnect.connect(dbConnect.java:18)
at loginServlet.CheckUser(loginServlet.java:41)
at loginServlet.service(loginServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)

未連接

Class.forName(“ com.mysql.jdbc.Driver”)。newInstance(); 它產生一個錯誤並進入catch塊。

基於此信息,我猜測您的mysql.jar不在運行時類路徑中。

替換e.printStacktrace(); 而不是您幼稚的System.out.println(); 查看錯誤以及有關如何解決它們的消息。 順便說一句,您好像缺少數據庫連接jar(在這種情況下,是連接到MySQL的jar),該jar和其他第三方庫應該放在WEB-INF / lib目錄中。

對於第二個錯誤,您忘記使用userpassword變量。 只需將其更改為

con=(Connection) DriverManager.getConnection(dbUrl, user, password);

請注意,如果使用數據庫連接池,則可以擺脫所有這些問題。 請參閱將jdbc連接代碼放在servlet類中是一個好主意嗎? 學習處理數據庫連接的最佳方法。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank'

表示您用於連接mysql參數錯誤。 請檢查userpasswordhostdriver參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM