Java 如何在Gui程序中实现JDBC数据库,以验证登录程序的用户和密码

Java 如何在Gui程序中实现JDBC数据库,以验证登录程序的用户和密码,java,Java,我目前正在制作一个gui程序,我不知道如何设置我的程序,因此当用户输入用户名和密码,然后单击登录按钮时,它会检查数据库中的用户名和密码,如果用户名和密码在数据库中,他们会接受,如果没有被拒绝。请阅读教程以了解有关SQL的信息 编辑: 你为什么要读取所有的用户名和密码?对于登录检查,您将查询数据库,查看是否在数据库中找到在userid/password文本字段中输入的值 因此,查询将类似于: query = "select userid from person where userid = ? a

我目前正在制作一个gui程序,我不知道如何设置我的程序,因此当用户输入用户名和密码,然后单击登录按钮时,它会检查数据库中的用户名和密码,如果用户名和密码在数据库中,他们会接受,如果没有被拒绝。

请阅读教程以了解有关SQL的信息

编辑:

你为什么要读取所有的用户名和密码?对于登录检查,您将查询数据库,查看是否在数据库中找到在userid/password文本字段中输入的值

因此,查询将类似于:

query = "select userid from person where userid = ? and password = ?";
PreparedStatement stm = con.prepareStatement(query); 
stmt.setString(1, useridTextField.getText());
stmt.setString(2, passwordTextField.getPassword().toString());
因此,您的SQL方法需要访问文本字段中的数据

然后,如果结果集不是空的,您就知道为给定的userid输入了正确的密码


再次阅读教程,了解正确的SQL。

您应该了解如何编写DAO和连接管理器类,然后将它们插入gui代码中。以下是您可以采取的方法:

  • 创建一个连接管理器类,以使用jdbc构造创建数据库连接
  • 编写DAO类对表数据(如登录表数据)进行操作,适当地调用它(如LoginDAO)
  • 如果需要对获取的数据执行某些业务逻辑或操作,请添加服务类
  • 最后,形成动作侦听器调用服务类来执行任务

  • 上述方法完全受MVC架构的影响,编写模块化的松散耦合代码。

    这是一小段用于检查用户名和密码的代码,这是用于mysql数据库的

    public void check(String username,String password)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","username","password");
            PreparedStatement pt=con.prepareStatement("select username,password from authentication_table where username=?");
            pt.setString(1, username);
            ResultSet rs=pt.executeQuery();
            String orgUname="",orPass="";
            while(rs.next())
            {
                orgUname=rs.getString("username");
                orPass=rs.getString("password");
    
            }
            if(orPass.equals(password))
            {
                //do something
            }
            else
            {
                //do something
            }
        }
        catch(Exception e)
        {
    
        }
    

    变量名不应以大写字符开头(欢迎、日期、版本…)@Hayde这不是jdbc,那么您使用的是哪个数据库?@Java初学者我现在把我的jdbc放上去了。@Hayde我想您需要用输入的用户名密码检查用户名和密码,如果是susscesful,则执行其他操作返回。如果这是您的要求,则在while循环while(rs.next())中检查用户名和密码是否匹配,然后继续,如果不匹配,则返回back@javaBeginner你能举个例子吗?-1,这是一个糟糕的实现。当您可以在SQL语句中使用“where”子句时,为什么要读取所有的用户名和密码?这是读取ResultSet中返回的多个记录的方法。当您对userid进行搜索时,您应该只返回一条记录。所以我会使用if语句来查看是否找到了userid。然后需要第二个if语句来检查密码是否匹配。我本以为我建议的同时查询用户ID和密码的代码会更简单。那么你只需要一个简单的rs.next()检查。你没有领会我的意思。如果用户出于某种奇怪的原因有两个密码怎么办?您的代码将在ResultSet中返回两条记录,并且您的代码将只将变量设置为最后检索到的值。因此,“密码检查”逻辑应该在while循环中,以确保检查所有记录。使用我的解决方案,您在结果集中只能返回1或0条记录。所以你只需要一个if语句就可以确定用户名/密码何时匹配。我不知道为什么你认为不应该在while循环中使用if语句。假设您正在从数据库中读取数据以显示在JTable中。有时您可能需要转换数据库中的数据,以便在JTable中正确显示数据。例如,您的数据库可能将布尔值存储为“0”或“1”,但JTable需要Boolean.TRUE或Boolean.FALSE才能使用默认呈现器。因此,在循环中,您将有一个简单的if语句来进行转换。当您使用while循环时,这意味着您希望找到多个记录。因此,除了while循环之外,还需要一个单独的if语句来验证密码。在我的建议中,由于查询检查userid和密码,我只需要使用一个简单的if语句来确定ResultSet是否包含该记录。代码更简单,如果用户出于某种奇怪的原因碰巧有两个密码,代码也可以工作。