我试图允许用户在输入正确的用户名时更改密码。用户名从数据库中提取,并与用户在表单中输入的用户名进行比较。我的问题是在验证完成后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;`
答案 0 :(得分:2)
尝试使用ps1.execute();
或ps1.executeUpdate()
代替ps1.executeQuery();
致电con.commit();
提交更改,不要忘记最后关闭资源。
检查以下方法的返回类型,以确保正确插入数据。
在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。
在此PreparedStatement对象中执行SQL语句,该对象必须是SQL INSERT,UPDATE或DELETE语句;或者不返回任何内容的SQL语句,例如DDL语句。
了解更多关于Difference between execute, executeQuery, executeUpdate
的信息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注入,也可以转义'
。