从 Servlet 连接到 MySQL 不起作用

Fee*_*eek 1 java mysql tomcat servlets jdbc

我正在制作一个小应用程序,以便我可以将我的课堂笔记发布到服务器。我在数据库端使用 JDBC 和 MySQL,在应用程序端使用 JSP/Servlets。

我编写了一个与我的 servlet 代码非常相似的独立 java 应用程序,它运行良好;我的 servlet 代码工作不正常。

属性定义:

static final String DB_URL = "jdbc:mysql://localhost/DATASET";
static final String USER = "user";
static final String PASS = "pass";
Connection con = null;
Statement s = null;
Run Code Online (Sandbox Code Playgroud)

doPost 方法:

    final String STATEMENT = "INSERT INTO FILE(upload_time, filename, class, data) VALUES(CURTIME(), '" + request.getParameter("file") + "', '" + request.getParameter("cls") + "', '" + request.getParameter("comm") + "')";
    final String STATEMENT2 = "INSERT INTO FILE(upload_time, filename, data) VALUES(CURTIME(), 'booga33.txt', 'ooga booga dooga22222222222222!')";

    try {
        con = DriverManager.getConnection(DB_URL, USER, PASS);
        s = con.createStatement();
        s.executeUpdate(STATEMENT2);
    }
    catch(SQLException i)
    {
        PrintWriter w = response.getWriter();
        w.println(i.getErrorCode());
    }
    catch(Exception e)
    {
        PrintWriter w = response.getWriter();
        w.println("error occured.");
    }
Run Code Online (Sandbox Code Playgroud)

它抛出一个SQLException并给我一个错误代码0,这是一个无效的登录。用户名/密码是正确的,但我认为 URL 格式错误(即使这正是我在 Java 应用程序中使用的数据库 URL。此外,/DATASET是我的模式的正确名称。

另外,我知道如果被许多用户使用,我的实现存在问题;我只想让它与单个用户一起工作,然后我会担心很多。

编辑:我使用 tomcat 作为我的 JSP/Servlet 页面的网络服务器,我还将 mysql-connector 放置在我的项目 (Eclipse) 的引用库部分。

非常感谢对此的任何帮助!!!!

编辑:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/DATASET
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DoSubmit.doPost(DoSubmit.java:38)
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:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
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:624)
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:495)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
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)
Run Code Online (Sandbox Code Playgroud)

解决方案:WEB-INF->lib如果使用 Eclipse IDE,请将 MySQL 连接器 JAR 放入。此外,Class.forName(driver);在建立连接之前需要。

YCF*_*F_L 5

找不到适合 jdbc 的驱动程序:mysql://localhost:3306/DATASET

首先将您的 JDBC 连接器放在您的类路径中,您可以从这里下载

如果您使用的是 Maven,请使用以下命令:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

其次确保您的连接信息正确:

public class CreateConnection {
    String driver = "com.mysql.jdbc.Driver";
    String DB_username = "root";
    String DB_password = "pass";
    String DB_URL = "jdbc:mysql://localhost:3306/DATABASE";

    public Connection getConnection() {
        try {
            Class.forName(driver);
            java.sql.Connection con = DriverManager.getConnection(DB_URL, DB_username, DB_password);
            return con;

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("Exception " + e);
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我建议使用 Prepared Statement 代替你的方式,这可以是一个安全的练习方式,你可以在这里了解这个Prepared Statement

编辑

就像@Gimby 说的那样:确保您的 jar 位于正确的位置,因此如果您使用的是 Eclipse,请使用如何在Eclipse中将文件放置在类路径上?如果 Netbeans 使用如何在 Netbeans 中设置类路径?

  • @feek 它不起作用,因为它在运行应用程序时实际上不在类路径中。您构建和部署应用程序的方式一定有问题。更具体地说:mysql jar 应该在 WEB-INF/lib 中结束,但它不是。 (2认同)

归档时间:

查看次数:

2299 次

最近记录:

8 年,9 月 前