Servlet无法更新数据库中的值

问题描述 投票:0回答:1

我正在尝试创建基本的密码重置系统。我正在为每个用户创建一个唯一的令牌,存储在数据库中并在url中检索该令牌值,例如:http://localhost:8080/login/reset-password.jsp?token=0d1eaa1a-869c-4f40-8437-a3cdaeddf497

这里的问题是我正在尝试更新数据库中的密码,但是该值未更新。它显示密码已更改,但是数据库中没有任何反应。请帮助。

这是我的servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String password = request.getParameter("password");
        String token = request.getParameter("token");



                ForgotPasswordHandler.UpdatePassword(password, token);

                String message = "Password changed!";
                request.setAttribute("message", message);
                request.getRequestDispatcher("reset-password.jsp?token=" + token).forward(request, response);   



    } 

这是我在ForgotPasswordHandler.java类中的方法:

public static void UpdatePassword(String password, String token) {

            try
              {

              if (con == null){
                 System.out.println("Failed connection");

              }else{

                PreparedStatement ps = con.prepareStatement(
                  "UPDATE user SET password = ? WHERE reset_token = ?");

                ps.setString(1,password);
                ps.setString(2,token);

                ps.executeUpdate();

                ps.close();


              }}
            catch (Exception e) {
                 e.printStackTrace(System.out);    
              }

            }

java servlets
1个回答
0
投票

您的连接可能已关闭autoCommit。如果这是问题,您可以使用以下代码进行修复:

   if (con.getAutoCommit()) {
      con.commit();
   }

要注意的另一件事是,如果对ps.executeUpdate()的调用失败,则不会清除准备好的语句。为了避免该问题,请将“ close”移到“ finally”块附近。

© www.soinside.com 2019 - 2024. All rights reserved.