Ошибка изменения кода пароля с помощью Java и MySQL

#java #mysql #jdbc

Вопрос:

Я создаю этот компонент, в котором я могу изменить пароль, хранящийся в моей базе данных MySQL, с помощью Java Eclipse. У меня есть типичная система, в которой вам нужно ввести свой старый пароль и новый пароль, и этот старый пароль должен быть проверен на соответствие тому, который есть в системе.

 public class ChangePassword implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        JPasswordField oldPswrd = new JPasswordField(50);
        JPasswordField newPswrd = new JPasswordField(50);
        JLabel j = new JLabel("Type in old password: ");
        JLabel j2 = new JLabel("Type in new password: ");
        j.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        j2.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        
        Object[] message = {
                j, oldPswrd,
                j2, newPswrd,
            };
        
        int result = JOptionPane.showConfirmDialog(null, message, 
                 "CHANGE PASSWORD", JOptionPane.OK_CANCEL_OPTION);
        if (result == JOptionPane.OK_OPTION) {
           char[] oldp = oldPswrd.getPassword();
           String oldP = String.valueOf(oldp);
           char[] p = newPswrd.getPassword();
           String newP = String.valueOf(p);
           System.out.println("New name: "   newP);
//// PROBLEM SEEMS TO START HERE ///////////////////////////////////////////
           try {    
               Connection connection = DriverManager.getConnection(url, username, password);
               System.out.println("connection success!!");
               
               String sql = "SELECT * FROM user_info WHERE user_id = ? amp;amp; user_password = ?";
               PreparedStatement statement = connection.prepareStatement(sql);
               statement.setString(1, user_id);
               statement.setString(2, password);
               
               ResultSet rs = statement.executeQuery();
               if (rs.next()){
                   String oldPassword = rs.getString("user_password");
                   if (oldP.equals(oldPassword)) {
                       String sql1 = "UPDATE user_info SET user_password = ? WHERE user_id = ?";
                       PreparedStatement statement1 = connection.prepareStatement(sql1);
                       statement1.setString(1, newP);
                       statement1.setString(2, user_id);
                       
                        int rows2 = statement1.executeUpdate();
                        if (rows2 > 0) {
                            System.out.println("UPDATE PASSWORD!");
                        }
                   }
               } else {
                   JLabel l = new JLabel("Old password does not match");
                   l.setFont(new Font("Times New Roman", Font.PLAIN, 15));
                   l.setHorizontalAlignment(SwingConstants.CENTER);
                   JOptionPane.showMessageDialog(null, l, "ERROR", JOptionPane.PLAIN_MESSAGE);
               }
            } catch (SQLException e) {
                System.out.println("amp; i oop");
                e.printStackTrace();
            }
///////// PROBLEM SEEMS TO END HERE   ///////////////////////////////////////////
           frame.setVisible(false);
           new UserMain(user_id, name, newP);
    }
        
    }
}
 

У меня есть эта таблица со строкой данных, уже введенной в качестве теста. Однако всякий раз, когда я пытаюсь изменить пароль — вводя правильный старый пароль и вводя другой новый, — он всегда отображается

старый пароль не совпадает

Там нет синтаксических ошибок или ошибок подключения, поэтому я решил, что проблема в логической ошибке или в чем-то, что я не смог уловить. Кроме того, части java работают нормально, я их уже проверил. Проблема, по-видимому, кроется между try catch частями и моего кода.

Ответ №1:

password это пароль вашей базы данных, а не один из паролей пользователя. Изменить

 statement.setString(2, password);
 

Для

 statement.setString(2, oldP);
 

Комментарии:

1. Ты нашел проблему! Большое вам спасибо!!

Ответ №2:

Откуда вы берете это «имя пользователя» и «пароль»?

Кроме того, вы передаете ту же переменную «пароль», чтобы найти пользователя, который используется для подключения к БД. Я думаю, что это должно быть изменение на «oldP «.

Комментарии:

1. Имя пользователя и пароль передаются из моей другой функции, от которой происходит эта функция. И да, похоже, в этом и заключается проблема. Большое спасибо!