java - 通过与数据库中的用户详细信息进行比较来进行用户登录

标签 java sql netbeans

我想确保当用户输入用户名和密码时,通过检查输入是否与用户表中的某些行匹配来完成身份验证。 这是到目前为止的代码: 它只允许数据库中的第一个用户登录。请建议我如何正确设置。谢谢

private class thehandler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent ae) {
        String namevalue = usertext.getText();
        String pwdvalue = pwdtext.getText();

        //read values from user table in sql database    
   try {
        Class.forName("com.mysql.jdbc.Driver");
        String conUrl = "jdbc:mysql://localhost/hall?" +
                               "user=root&password=blend";

        Connection con = DriverManager.getConnection(conUrl);
        Statement stmt = con.createStatement();

        ResultSet rs = stmt.executeQuery("SELECT * FROM user");

        while(rs.next()) {

            if(namevalue.equals(rs.getString("userName")) && pwdvalue.equals(rs.getString("password"))) {
            JOptionPane.showMessageDialog(null, "You are logged in", 
                    "Makhall login", JOptionPane.INFORMATION_MESSAGE);
            //move on to homepage if user is valid
            homePage home = new homePage();
            home.setAlwaysOnTop(rootPaneCheckingEnabled);
            }
            else {

            JOptionPane.showMessageDialog(null, "Incorrect username or password",
                    "Error", JOptionPane.ERROR_MESSAGE);
            }
            break;
        }
    }
    catch (SQLException e) {
        System.out.println("SQL Exception: "+ e.toString());
    } 
    catch (ClassNotFoundException cE) {
        System.out.println("Class Not Found Exception: "+ cE.toString());
    }

  }
}

最佳答案

抱歉,我认为这是糟糕的代码。您将所有内容混合在一起:UI、数据库连接、查询等。Java 是一种面向对象的语言。良好的对象设计的要素之一是凝聚力:让一个类做好一件事。

首先将数据库查询分离到数据访问对象中。让它工作,测试它,然后让其他客户简单地使用它。您将通过让更简单的对象协作来构建复杂的解决方案。

您当前的问题是您的 SELECT 需要 WHERE 子句:WHERE username = ?

您只想检查当前用户的密码。

那个问号是故意的:使用PreparedStatement,而不是Statement。

关于java - 通过与数据库中的用户详细信息进行比较来进行用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015023/

相关文章:

java - 如何防止intellij删除所有空行?

c# - Entity Framework 错误 : There is already an open DataReader associated with this Command

mysql 查询连接 3 个表,其中一个表没有关联

java - 用玩! GAE 上的缓存

java - 用一个循环 foreach 两个不同的对象

netbeans - 使用 Mercurial 和 Netbeans 组织工作流程(+ bitbucket.org?)

java - Netbeans Java 库包含

java - 使用 NetBeans 连接到 Java 中的 Access 数据库

java - 如何从 EclEmma 的覆盖率计算中排除类,而不实际将它们从覆盖率本身中排除

java - MongoDB:仅检索特定记录