使用 Java 和 MySQL 更改密码代码错误

Posted

技术标签:

【中文标题】使用 Java 和 MySQL 更改密码代码错误【英文标题】:Change password code error with Java & MySQL 【发布时间】:2021-08-02 01:40:57 【问题描述】:

我正在构建这个组件,我可以在其中使用 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);
    
        
    

我有这个表,其中一行数据已经设置为测试。但是,每当我尝试更改密码时——输入正确的旧密码并输入另一个新密码——它总是显示

旧密码不匹配

没有语法或连接错误,所以我认为问题是逻辑错误或我无法捕捉到的问题。此外,java 部分工作正常,我已经检查过了。问题似乎在我的代码的trycatch 部分之间。

【问题讨论】:

【参考方案1】:

password 是您的数据库密码,而不是用户密码之一。改变

statement.setString(2, password);

statement.setString(2, oldP);

【讨论】:

你找到了问题!非常感谢!!【参考方案2】:

你从哪里得到这个“用户名”和“密码”?

您还传递了相同的“密码”变量来查找用于数据库连接的用户。我认为应该改为“oldP”。

【讨论】:

用户名和密码都是从我的另一个函数传递过来的,这个函数源于这个函数。是的,这似乎是问题所在。非常感谢!

以上是关于使用 Java 和 MySQL 更改密码代码错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot和MySql - 无法使用新的服务数据库用户名/密码

mysql 更改root密码

使用核心java程序没有密码的Mysql连接

如何区分“用户下次登录必须更改密码”和“密码错误”用例?

mysql8 创建用户后修改密码

每次更改密码时出现 vserver phpmyadmin 错误