#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. Имя пользователя и пароль передаются из моей другой функции, от которой происходит эта функция. И да, похоже, в этом и заключается проблема. Большое спасибо!