更新servlet中的sql语句而不是servlet

时间:2014-05-27 20:08:58

标签: java mysql jsp servlets

我试图允许用户在输入正确的用户名时更改密码。用户名从数据库中提取,并与用户在表单中输入的用户名进行比较。我的问题是在验证完成后UPDATE语句没有产生任何结果。有人可以帮帮我吗?

   String un = request.getParameter("username");
    String psw = request.getParameter("password");
    String cPsw = request.getParameter("cpassword");
    Connection con = ConnectionHelper.getConnection();

    try {
        ResultSet rs = userList(con);
        if (rs.next()) {

            String n = rs.getString("username");

            if (n.equals(un)) {
                out.print("Password match");
                String updateQuery = "UPDATE RegisteredUserInfo SET password ='"
                        + cPsw + "'WHERE username ='" + un + "'";

                PreparedStatement ps1 = con.prepareStatement(updateQuery);
                ps1.executeQuery();

                ServletContext context = getServletContext();
                RequestDispatcher rd = context
                        .getRequestDispatcher("/Welcome.jsp");
                rd.forward(request, response);
            }
        }

    } catch (SQLException sx) {
        out.println();
    }
}

public ResultSet userList(Connection con) throws SQLException {
    PreparedStatement ps;
    ResultSet rs;
    String matchingUname = "SELECT username FROM RegisteredUserInfo";
    ps = con.prepareStatement(matchingUname);
    rs = ps.executeQuery();
    return rs;`

2 个答案:

答案 0 :(得分:2)

尝试使用ps1.execute();ps1.executeUpdate()代替ps1.executeQuery();

致电con.commit();提交更改,不要忘记最后关闭资源。


检查以下方法的返回类型,以确保正确插入数据。

ResultSet executeQuery()

在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。

int executeUpdate()

在此PreparedStatement对象中执行SQL语句,该对象必须是SQL INSERT,UPDATE或DELETE语句;或者不返回任何内容的SQL语句,例如DDL语句。

了解更多关于Difference between execute, executeQuery, executeUpdate

的信息

要记住的要点

  • 使用PreparedStatement而不是使用可能导致问题的单引号查询字符串。在Using Prepared Statements
  • 上查找示例
  • 不要忘记关闭连接,结果集和声明等资源。
  • 使用 finally 块来处理它或阅读有关Java7 -The try-with-resources Statement
  • 的更多信息
  • 不要只是在catch块中吃掉异常。正确处理异常。您可以在开发时尝试使用e.printStackTrace()

答案 1 :(得分:1)

您需要为SQL UPDATE(或INSERT / DELETE)调用executeUpdate()

            String updateQuery = "UPDATE RegisteredUserInfo SET password = ?"
                    + " WHERE username = ?";

            PreparedStatement ps1 = con.prepareStatement(updateQuery);
            ps1.setString(1, cPsw);
            ps1.setString(2, un);
            ps1.executeUpdate();

也可以使用上面的PreparedStatement。查找SQL注入,也可以转义'