使用JSP将表单数据连接到MySQL

时间:2018-04-18 01:17:14

标签: java mysql sql jsp netbeans

我正在尝试使用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");
%>

请帮我识别我错过的内容

2 个答案:

答案 0 :(得分:2)

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

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指出了你的代码的许多其他潜在问题,其中一些但不一定会导致它崩溃。我看到的另一个问题是你的出生日期字段被视为一个字符串,它可能应该是一个日期,你应该作为日期插入你的数据库。

答案 1 :(得分:1)

此代码有太多问题:

  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年里,世界发生了变化。旧技术存在教程,但并不意味着它们应该是您的第一个想法。