【问题标题】:Connecting Form data to MySQL using JSP使用 JSP 将表单数据连接到 MySQL
【发布时间】:2018-09-28 02:29:21
【问题描述】:

我正在尝试使用 JSP 将我网页中的表单中的字段存储到 MySQL 中的数据库中。我没有收到任何错误,但是当我点击提交时,我没有在我的数据库中看到数据。请帮我确定我的问题。我有以下代码:

注册 - 新用户

        <div id="container">       
        <form action = "insertData.jsp" method = "post">
            <table>
            <tr><td>E-mail/username:</td><td><input type="text" name="e-mail"></td></tr>
            <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
            <tr><td>First Name:</td><td><input type="text" name="fName"></td></tr>
            <tr><td>Last Name:</td><td><input type="text" name="lName"></td></tr>
            <tr><td>Date Of Birth:</td><td><input type="text" name="dateOfBirth"></td></tr>
            <tr><td>Account Type:</td><td><input type="text" name="type"></td></tr>
            <tr><td></td><td><input type="submit" value="Submit"></td></tr>
            </table>           

        </form>    
        </div> 

</body>

还有我的 JSP 代码

<%
    Connection con = null;

    String email = request.getParameter("e-mail");
    String password = request.getParameter("password");

    String firstName = request.getParameter("fName");
    String lastName = request.getParameter("lName");
    String dob = request.getParameter("dateOfBirth");

    String accountType = request.getParameter("type");

    String queryText = "insert into user values('" + email + "'+'" + password + "','" + firstName + "','" + lastName + "','" + dob + "','" + accountType + "')";

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/project", "root", "B@neswor1");

        Statement stat = con.createStatement();

        ResultSet rst = stat.executeQuery(queryText);
        System.out.println("Data is successfully inserted!");

        rst.close();
        stat.close();
        con.close();
    } catch (Exception e) {
    }

    System.out.println("Success");
%>

请帮我找出我错过了什么

【问题讨论】:

  • catch (Exception e) { } - 是的,没有错误报告
  • JSP 代码仅用于显示,将 DB 代码移动到 servlet。
  • 此外,使用preparedStatement 或类似的方法进行插入。
  • 你吃了异常,因此没有显示错误。添加一个 e.printStackTrace();在你的 catch 块中

标签: java mysql sql jsp netbeans


【解决方案1】:

问题的直接原因是您的插入查询:

String queryText = "insert into user values('" + email + "'+'" +
    password + "','" + firstName + "','" + lastName + "','" + dob + "','" +
    accountType + "')";

如果您仔细观察,电子邮件文字后面没有逗号。但是您可以通过使用准备好的语句来避免这种情况:

String sql = "insert into user values (?, ?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(insertTableSQL);
ps.setString(1, email);
ps.setString(2, password);
ps.setString(3, firstName);
ps.setString(4, lastName);
ps.setString(5, dob);
ps.setString(6, accountType);
ps.executeUpdate();

请注意,使用语句可以更轻松地查看查询字符串的构建方式。它还使您免于难看的字符串连接和转义,这很容易出错。

@duffymo 指出了您的代码的许多其他潜在问题,尽管其中一些问题不一定会导致它崩溃。我看到的另一个问题是您的出生日期字段被视为一个字符串,它可能应该是一个日期,您应该将其作为日期插入到您的数据库中。

【讨论】:

  • 和 OP,请不要默默吞下你的例外
【解决方案2】:

这段代码有太多问题了:

  1. 永远不要在 JSP 中编写 scriptlet 代码。
  2. 您在该 scriptlet 代码中有一个空的 catch 块。如果抛出异常,您将永远不会知道。
  3. 在 finally 块中关闭资源。
  4. 您不使用 PreparedStatement。您要求进行 SQL 注入攻击。
  5. 无 XSS 检查。
  6. 不对输入数据进行验证。
  7. 如果必须使用 JSP,请学习 JSTL。
  8. 请注意,JSP 模型是 1998 年的老式模型。现代 UI 是使用 HTML5、CSS3 和 Javascript 与 REST 服务通信来完成的。在过去的 20 年里,世界发生了变化。已有针对旧技术的教程,但这并不意味着您应该首先想到它们。

【讨论】:

  • 这应该是任何发布 JSP/DB 问题的人的清单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多