Java 程序不进入while循环

Java 程序不进入while循环,java,jdbc,Java,Jdbc,我正在创建一个web应用程序。我的数据库使用netbeans 7.4和MySQL 6.1。我想更改用户的密码。保存在数据库中的密码结构在md5中。因此,我必须首先将用户输入的当前密码转换为md5,并检查数据库是否存在匹配项。现在,我的ChangePassword.jsp中有一个表单结构。表单中有三个字段用于当前、新建和重新键入密码。然后通过一个servlet,我处理这些信息 与数据库的连接很好,我已经能够将当前密码加密到md5中。但是,当我在程序中添加一个while(rs.next())循环来循

我正在创建一个web应用程序。我的数据库使用netbeans 7.4和MySQL 6.1。我想更改用户的密码。保存在数据库中的密码结构在md5中。因此,我必须首先将用户输入的当前密码转换为md5,并检查数据库是否存在匹配项。现在,我的ChangePassword.jsp中有一个表单结构。表单中有三个字段用于当前、新建和重新键入密码。然后通过一个servlet,我处理这些信息

与数据库的连接很好,我已经能够将当前密码加密到md5中。但是,当我在程序中添加一个
while(rs.next())
循环来循环查询的所有结果时,它不起作用。因此它不会转发到所需的jsp。有没有关于我如何做到这一点的建议?任何帮助都将不胜感激。提前谢谢。这是我的密码

try{
            ServletContext context = getServletContext();

            String currentPassword = request.getParameter("currentPassword");
            String newPassword = request.getParameter("newPassword");
            String tryNewPassword = request.getParameter("retypePassword");
            String pswrd = "";

            //For Password Encryption into md5
            String md5 = null;
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(currentPassword.getBytes(), 0, currentPassword.length());
            md5 = new BigInteger(1, digest.digest()).toString(16);

            //Database Connection
            Class.forName(context.getAttribute("dbdriver").toString());
            String db = context.getAttribute("connstr").toString();
            Connection conn = DriverManager.getConnection(db);
            Statement stmt = conn.createStatement();
            stmt = conn.createStatement();

            //Check Database Connection
            if (conn != null) {
                JOptionPane.showMessageDialog(null, "Connected!");
            } else {
                JOptionPane.showMessageDialog(null, "Not Connected!");
            }

            String query = "SELECT password FROM accounts WHERE password='"+md5+"'";
            ResultSet rs = stmt.executeQuery(query);


            JOptionPane.showMessageDialog(null, "Entering while loop");
            while(rs.next()){
            if(md5CurrentPasswrd.equals(rs.getString(1))){
                if(newPassword == tryNewPassword){
                    digest.update(newPassword.getBytes(), 0, newPassword.length());
                    md5NewPasswrd = new BigInteger(1, digest.digest()).toString(16);
                    String queryUpdate = "UPDATE accounts SET password='"+md5NewPasswrd+"' /n"
                            + " WHERE password='"+md5CurrentPasswrd+"'";
                    PreparedStatement prepStmt = conn.prepareStatement(queryUpdate);
                    prepStmt.executeUpdate();

                    response.sendRedirect("/Project1/PasswordSaved.jsp");
                }else{
                    response.sendRedirect("/Project1/PasswordNotSaved.jsp");
                }
            }else{
               response.sendRedirect("/Project1/PasswordNotSaved.jsp");
            }
            pswrd = rs.getString(1);
            JOptionPane.showMessageDialog(null, "Running while loop");
        }

            JOptionPane.showMessageDialog(null, "End of while loop");

        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(ChangePassword.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ChangePassword.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(ChangePassword.class.getName()).log(Level.SEVERE, null, ex);
        }

首先要做的事情是:检查是否有实际的结果需要迭代。如果没有下一步,它就不会进入while循环,这很正常。下一步要做的事情是:停止像那样构建SQL。改为使用参数化SQL,并指定值参数。您使用的是
PreparedStatement
(好),但没有使用它的重要功能(坏)。如果您只关心一点数据库的安全性,请阅读以下内容(编辑:Jon抢先阅读),然后删除行
Class.forName(context.getAttribute(“dbdriver”).toString()-这已经十年不需要了。我的建议是,重新编写整个程序。它的代码是这样的:if(newPassword==tryNewPassword){这让那些不得不维护代码的开发人员感到抓狂