无法使用 Swing 登录

Posted

技术标签:

【中文标题】无法使用 Swing 登录【英文标题】:Cannot login using Swing 【发布时间】:2019-08-30 19:35:52 【问题描述】:

我创建了一个登录 GUI 登录表单,并在用户名和密码与数据库中输入的匹配时尝试登录。但是,我无法登录

我在代码中找不到任何错误。

public class Login 
private JTextField nameTextField;
private JButton submitButton;
private JTextField passwordTextField;
private JLabel Message;
private JPanel LoginPanel;

public static void main(String[] args) 
    JFrame frame=new JFrame("Login");
    frame.setContentPane(new Login().LoginPanel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setSize(650,500);
    frame.setVisible(true);



public Login() 
    submitButton.addActionListener(new ActionListener() 
        @Override
        public void actionPerformed(ActionEvent e) 
            Connection con = null;

            try 
                Class.forName("com.mysql.cj.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_db", "root", "");
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery("select * from employee");
                while (rs.next()) 
                    if (rs.getString("name").equals(nameTextField.getText()) && rs.getString("password").equals(passwordTextField.getText())) 
                        Message.setText("Login Success");
                    
                    else 
                        Message.setText("Failed");
                    
                
                con.close();

             catch (SQLException e1) 
                e1.printStackTrace();
             catch (ClassNotFoundException e1) 
                e1.printStackTrace();
            


        

    );

如果密码和用户名匹配,我希望应用程序显示“登录成功”消息

【问题讨论】:

您在Message 中为数据库中遇到的每个用户设置文本。因此,如果最后一个不匹配,则会出现登录错误 1) 请参阅 Detection/fix for the hanging close bracket of a code block 了解我无法再费心修复的问题。 2) 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并始终如一地使用它。 这不是您应该验证密码的方式。请阅读如何安全地散列和检查密码。 【参考方案1】:

目前您正在扫描整个表,实际上是检查数据库中最后一个元素的用户名/密码。 我只需获取与输入的用户名对应的(唯一)元素并验证密码。 像这样的:

PreparedStatement st = con.prepareStatement("SELECT password FROM employee WHERE name = ?");
st.setString(1, nameTextField.getText().trim());
ResultSet rs = st.executeQuery();
if (rs.next() && rs.getString(1).equals(passwordTextField.getText()))
  Message.setText("Login Success");
else
  Message.setText("Failed");
rs.close();
con.close();

【讨论】:

以上是关于无法使用 Swing 登录的主要内容,如果未能解决你的问题,请参考以下文章

java swing中登录界面验证码的实现。

无法导入 javax.swing.JFrame

无法使用 java swing 从类路径渲染图像?

Java Swing上的图形界面无法正常工作[重复]

对于登录GUI编译器错误:无法找到符号[复制]

无法理解我的 java.io.InvalidClassException:javax.swing.JComponent