使用 Java & MySQL 更改密码代码错误
Change password code error with Java & MySQL
我正在构建这个组件,我可以使用 Java Eclipse 更改存储在我的 MySQL 数据库中的密码。我有一个典型的系统,你必须输入你的旧密码和新密码,并检查旧密码是否与系统中的密码相匹配。
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 = ? && 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("& i oop");
e.printStackTrace();
}
///////// PROBLEM SEEMS TO END HERE ///////////////////////////////////////////
frame.setVisible(false);
new UserMain(user_id, name, newP);
}
}
}
我有这个 table 已经设置了一行数据作为测试。但是,每当我尝试更改密码时 - 输入正确的旧密码并输入另一个新密码 - 它总是显示
old password does not match
没有语法或连接错误,所以我认为问题是逻辑错误或我无法捕捉到的问题。此外,java 部分工作正常,我已经检查过了。问题似乎在我代码的 try
和 catch
部分之间。
password
是你的数据库密码,不是其中一个用户密码。变化
statement.setString(2, password);
至
statement.setString(2, oldP);
你从哪里得到这个“用户名”和“密码”?
您还传递了相同的“密码”变量来查找用于数据库连接的用户。我觉得应该改成“oldP”。
我正在构建这个组件,我可以使用 Java Eclipse 更改存储在我的 MySQL 数据库中的密码。我有一个典型的系统,你必须输入你的旧密码和新密码,并检查旧密码是否与系统中的密码相匹配。
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 = ? && 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("& i oop");
e.printStackTrace();
}
///////// PROBLEM SEEMS TO END HERE ///////////////////////////////////////////
frame.setVisible(false);
new UserMain(user_id, name, newP);
}
}
}
我有这个 table 已经设置了一行数据作为测试。但是,每当我尝试更改密码时 - 输入正确的旧密码并输入另一个新密码 - 它总是显示
old password does not match
没有语法或连接错误,所以我认为问题是逻辑错误或我无法捕捉到的问题。此外,java 部分工作正常,我已经检查过了。问题似乎在我代码的 try
和 catch
部分之间。
password
是你的数据库密码,不是其中一个用户密码。变化
statement.setString(2, password);
至
statement.setString(2, oldP);
你从哪里得到这个“用户名”和“密码”?
您还传递了相同的“密码”变量来查找用于数据库连接的用户。我觉得应该改成“oldP”。