【问题标题】:Access to MySQL using Java Servlet?使用 Java Servlet 访问 MySQL?
【发布时间】:2013-03-25 20:33:17
【问题描述】:

解决方案:

我添加了这段代码

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

之前

Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");

谢谢大家回复我的问题

=====================

我有问题,我尝试使用 servlet 将数据插入 mysql db,但我无法访问 MySQL

  • 数据库名称:test
  • 表名:test
  • 我已经在项目库中添加了 jdbc 连接器
  • 我正在使用 JDK 1.7、NetBeans 7.3、MySQL 5.6、Tomcat 7.0、Connector/J 5.1.24

1- 这是 sign_up.jsp 页面中的“表单操作”:

<form action="RegisterUser" method="post">
    <td><input type="submit" value="Submit"></td>
</form>

2- 这是 RegisterUser.java servlet:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

@WebServlet(urlPatterns = {"/RegisterUser"})
public class RegisterUser extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, SQLException {

    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan3";
        int phone = 123456;

        String insert = "INSERT INTO test VALUES ('\" + name + \"', \" + phone + \")";

        s.executeUpdate(insert);

        s.close();
        con.close();

    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

3-异常结果:

HTTP Status 500 - Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

type Exception report

message Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

description The server encountered an internal error that prevented it from fulfilling this request.

exception
java.lang.SecurityException: Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test
    RegisterUser.processRequest(RegisterUser.java:66)
    RegisterUser.doPost(RegisterUser.java:173)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.39 logs.

4- 但是当我使用相同的代码但在“没有 servlet 或 Web 应用程序”的 java 文件中时,它可以正常工作:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Test {
    public static void main(String[] args){
    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan4";
        int phone = 8985895;

        String insert = "INSERT INTO test VALUES ('" + name + "', " + phone + ")";

        s.executeUpdate(insert);

        s.close();
        con.close();
        System.out.println("done");
    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}

}

那么 servlet 有什么问题? 为什么代码适用于 java 应用程序。但它不适用于网络应用。?

【问题讨论】:

标签: mysql jsp web-applications servlets insert


【解决方案1】:

你会收到Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

这意味着当您从 Web 应用程序运行它时,JRE 无法在 Classpath 中找到 Class。

如果此代码在您的 Standalone 中有效,则意味着您需要在某处拥有一个包含 com.mysql.jdbc.Driver 类(所谓的 JDBC 驱动程序)的 JAR 文件。这个 JAR 需要在 Tomcat 中可见。因此,我建议将mysql-jdbc.jar 放在项目的/WEB-INF/lib 目录的物理位置。

或者,您可以在此处添加第三方库,例如 JDBC 驱动程序

右键项目名称-->属性

来自您的 NetBeans IDE

然后重新启动 Tomcat 应该可以工作了。

第二,你不需要

import com.mysql.jdbc.Driver;

在您的 Servlet 中。

【讨论】:

    【解决方案2】:

    大卫说得对,我想补充一下,你也可以通过将jar文件粘贴到java的安装文件夹中来安装驱动。

    \Program Files\Java\jre7\lib\ext  
    

    嗯,我不太喜欢 mysql,总是在 windows server 2008 上使用 Mssql。这是我使用的代码,我可能是你的答案,因为 mysql 连接的工作方式与 sql 几乎相同。

     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
     conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName="+database+";user="+user+";password="+password);
    

    【讨论】:

    • 我已经将连接器 jar 添加到此目录(\Program Files\Java\jre7\lib\ext),然后将其添加到 NetBeans 中的 mu 项目(库->添加 JAR/文件夹)我试图将它添加到这个目录(WEB-INF/lib)
    • 好吧,我不太喜欢 mysql,总是在 windows server 2008 上使用 mssql。这是我使用的代码,我可能是你的答案,因为 mysql 连接的工作方式与 sql 几乎相同,查看我的帖子的编辑
    【解决方案3】:

    首先,您应该将其放入持久层。

    1) 确保您的 JDBC 驱动程序就位。将其复制到您的类路径中,例如/WEB-INF/lib 目录。链接:MySQL JDBC Driver Download Page

    2) 检查您的连接字符串:jdbc:mysql://&lt;server&gt;:&lt;port&gt;/&lt;database&gt;,似乎缺少端口。试试jdbc:mysql://127.0.0.1:3306/test

    【讨论】:

    • MySQL 在 3306 端口工作,同样的代码(char by char)适用于 JAVA App。正确,只有当我在servlet“WEB App”中使用它时才会出现问题。感谢您的回复
    • 驱动复制到哪里了?该文件的名称是什么?
    • (mysql-connector-java-5.1.24-bin.jar) 我将它复制到 (\Program Files\Java\jre7\lib\ext) 我也尝试将它复制到 (/WEB -INF/lib) 我认为连接器文件或 localhost:3306 没有问题,'因为它在 JAVA 应用程序中工作,问题只在(使用 Servlet 的 WEB 应用程序)
    • 您是否尝试过清理、重新发布和重新启动 tomcat?
    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2010-11-08
    • 2010-11-21
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多