Java 在eclipse中将Servlet连接到MySQL数据库

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25725675/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 01:00:47  来源:igfitidea点击:

Connect Servlet to MySQL database in eclipse

javaeclipsejspservlets

提问by Pushpendra

I successfully connected database with simple java program using JDBC but when I am trying to connect database with Servlet, it gives me following errors and exceptions:

我使用 JDBC 成功地将数据库与简单的 java 程序连接起来,但是当我尝试将数据库与 Servlet 连接时,它给了我以下错误和异常:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:8888/ebookshop
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at QueryServlet.doGet(QueryServlet.java:35)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    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)

All severs running well and also I already added servlet and connecter API's in my library.

所有服务器都运行良好,而且我已经在我的库中添加了 servlet 和连接器 API。

For more Information these are my html and servlet files are:

有关更多信息,这些是我的 html 和 servlet 文件是:

html file

html文件

<html>
    <head><title>Yet Another Bookshop</title></head>

    <body>
        <h2>Yet Another Bookshop</h2>
        <form method="get" action="http://localhost:9999/Sixth/query">
            <b>Choose an author:</b>
            <input type="checkbox" name="author" value="Tan Ah Teck">Ah Teck
            <input type="checkbox" name="author" value="Mohammad Ali">Ali
            <input type="checkbox" name="author" value="Kumar">Kumar
            <input type="submit" value="Search">
        </form>
    </body>
</html>

My servlet:

我的 servlet:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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

public class QueryServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    // JDK 6 and above only
    // The doGet() runs once per HTTP GET request to this servlet.
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // Set the MIME type for the response message
        response.setContentType("text/html");
        // Get a output writer to write the response message into the network socket
        PrintWriter out = response.getWriter();

        Connection conn = null;
        Statement stmt = null;

        try {
            // Step 1: Allocate a database Connection object
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:8888/ebookshop", "myuser", "xxxx"); // <== Check!
            // database-URL(hostname, port, default database), username, password

            // Step 2: Allocate a Statement object within the Connection
            stmt = conn.createStatement();

            // Step 3: Execute a SQL SELECT query
            String sqlStr = "select * from books where author = "
                    + "'" + request.getParameter("author") + "'"
                    + " and qty > 0 order by price desc";

            // Print an HTML page as the output of the query
            out.println("<html><head><title>Query Response</title></head><body>");
            out.println("<h3>Thank you for your query.</h3>");
            out.println("<p>You query is: " + sqlStr + "</p>"); // Echo for debugging
            ResultSet rset = stmt.executeQuery(sqlStr);  // Send the query to the server

            // Step 4: Process the query result set
            int count = 0;
            while (rset.next()) {
                // Print a paragraph <p>...</p> for each record
                out.println("<p>" + rset.getString("author")
                        + ", " + rset.getString("title")
                        + ", $" + rset.getDouble("price") + "</p>");
                count++;
            }
            out.println("<p>==== " + count + " records found =====</p>");
            out.println("</body></html>");
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

回答by Santhosh

you should add this line,

你应该添加这一行,

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

As it is the first step to establish connection with JDBCdriver,

由于这是与JDBC驱动程序建立连接的第一步,

Connection conn = null;
      Statement stmt = null;
      try {
              Class.forName("com.mysql.jdbc.Driver");
         // Step 1: Allocate a database Connection object
         conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:8888/ebookshop", "myuser", "xxxx"); // <== Check!
            // database-URL(hostname, port, default database), username, password

         // Step 2: Allocate a Statement object within the Connection
         stmt = conn.createStatement();

Provide that you added the mysql connectorjar in your buidpath

提供您mysql connector在 buidpath 中添加的jar

回答by Bruno Franco

You need to load your driver before you get a connection, something like that:

您需要在获得连接之前加载驱动程序,如下所示:

//Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

Here is a nice example: http://www.tutorialspoint.com/jdbc/jdbc-sample-code.htm

这是一个很好的例子:http: //www.tutorialspoint.com/jdbc/jdbc-sample-code.htm

回答by SparkOn

As I see this jdbc:mysql://localhost:8888/ebookshopyou have changed the default port of mysql from 3306to 8888

正如我所看到的,jdbc:mysql://localhost:8888/ebookshop您已将 mysql 的默认端口从 更改33068888

If you did not change the port just use 3306 as the port for mysql

如果您没有更改端口,请使用 3306 作为 mysql 的端口

As the exception is saying No suitable driver foundthat obviously means you don't have the mysql-connector-[version].jarin your classpath If you are using eclipse just place the jar under WEB-INF/liband if you are using standalone tomcat just place the driver jar in the lib folder of Tomcat

作为例外No suitable driver found,这显然意味着您的类路径中没有 mysql-connector-[version].jar如果您使用的是 eclipse,只需将 jar 放在下面WEB-INF/lib,如果您使用的是独立的 tomcat,只需将驱动程序 jar 放在Tomcat的lib文件夹

回答by Prasad De Silva

try this

尝试这个

public static void connect() throws Exception {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    String url = "jdbc:mysql://localhost:3306/database_name?autoReconnect=true";
    c = DriverManager.getConnection(url,"root","123");
}

thanx..

谢谢..