检查java数据库中的用户名和密码,如果为false,则给出错误的密码消息

检查java数据库中的用户名和密码,如果为false,则给出错误的密码消息,java,sql,ms-access,while-loop,executequery,Java,Sql,Ms Access,While Loop,Executequery,在将输入的用户名和密码与java中的用户数据库进行比较后,我想显示错误的用户名和密码 问题是它对每一行执行if-else语句,直到它到达显示“username和password correct”的右行b4,但我希望它对所有行进行检查,如果它不存在,则显示“Please check username和password” 注意:请忽略命名约定问题在于while、if和任何其他推荐循环语句的安排,但我不确定如何组织它以获得所需的结果 这是我的代码和注释 public void displayUser

在将输入的用户名和密码与java中的用户数据库进行比较后,我想显示错误的用户名和密码

问题是它对每一行执行if-else语句,直到它到达显示“username和password correct”的右行b4,但我希望它对所有行进行检查,如果它不存在,则显示“Please check username和password”

注意:请忽略命名约定问题在于while、if和任何其他推荐循环语句的安排,但我不确定如何组织它以获得所需的结果

这是我的代码和注释

 public void displayUsers(String f, String s) {
        try {
            String queryString = "SELECT SName, SPwd FROM staff";
            ResultSet results = Statement.executeQuery(queryString);

            while (results.next()) {
            String staffname = results.getString("snameeee");
            String password =  results.getString("SPwd");

               if ((f.equals(staffname)) && (s.equals(password))) {

                  JOptionPane.showMessageDialog(null, "Username and Password exist");  
            }else {

             //JOptionPane.showMessageDialog(null, "Please Check Username and Password ");
            }
            results.close();
        } catch (SQLException sql) {

            out.println(sql);
        }

不,你所做的是错的

加载所有记录不是检查凭据的良好做法

username
参数传递到您的查询并签入数据库

1) 如果没有用户,告诉
用户名
不存在


2) 如果用户存在,则使用现有数据库用户的密码检查的密码。使用标志可以轻松解决此问题。像这样

public void displayUsers(String f, String s) {
    boolean flag = false;
    try {
        String queryString = "SELECT SName, SPwd FROM staff";
        ResultSet results = Statement.executeQuery(queryString);

        while (results.next()) {
        String staffname = results.getString("SName");
        String password =  results.getString("SPwd");

           if ((f.equals(staffname)) && (s.equals(password))) {
              flag = true;
              JOptionPane.showMessageDialog(null, "Username and Password exist");  
        } 
        results.close();
        if(!flag){
               JOptionPane.showMessageDialog(null, "Please Check Username and Password ");
        }
    } catch (SQLException sql) {

        out.println(sql);
    }

首先,不要将密码存储在纯文本中。其次,加载所有记录是执行上述代码的非常错误的方法

   public void displayUsers(String f, String s) {
    try {
        String queryString = "SELECT * FROM staff where SName=? and SPwd=?";
        //set this values using PreparedStatement
        ResultSet results = ps.executeQuery(queryString); //where ps is Object of PreparedStatement

        if(!results.next()) {

              JOptionPane.showMessageDialog("Wrong Username and Password.");  
        }

    } catch (SQLException sql) {

        out.println(sql);
    }finally{
      //closing ResultSet,PreparedStatement and Connection object
    }
您可以使用:

    boolean exist = false;
    String queryString = "SELECT SName, SPwd FROM staff";
    ResultSet results = Statement.executeQuery(queryString);
    while (results.next()) {
    String staffname = results.getString("SName");
    String password =  results.getString("SPwd");

       if ((f.equals(staffname)) && (s.equals(password))) {
          exist = true;
          JOptionPane.showMessageDialog(null, "Username and Password exist");  
       }
    } 
    results.close();
    if(!exist){
           JOptionPane.showMessageDialog(null, "Please Check Username and Password ");
    }
但是你应该用这个:

    String queryString = "SELECT SName, SPwd FROM staff where SName=? and SPwd=?";
    ps = con.prepareStatement(queryString);
    ps.setString(1,f);
    ps.setString(2,s);
    ResultSet results = ps.executeQuery();

    if (results.next()) {
        JOptionPane.showMessageDialog(null, "Username and Password exist");  
    }else{
         JOptionPane.showMessageDialog(null, "Please Check Username and Password ");
    } 
    results.close();
    con.close();

天哪。不要以纯文本形式存储密码。是的,我知道,但这只是一个演示项目,现在不关心密码加密。但是谢谢更新,请帮我解决这个问题!!!注意sql注入可以给我这个的编码吗?我不理解你的代码。我想要实现的是当输入的用户名或密码在数据库中不存在时错误的用户名或密码通知唯一的主要问题是很容易发生sql注入刚刚试过,由于我是一名安全专家,但无论如何,谢谢如果第3行上有正确的用户名和密码,则在下一个结果正确之前2周给出else结果,这是我的主要问题抱歉,在我的代码错误中,if结束。我编辑它。但是我建议您使用第二种解决方案。我认为这段代码可以帮助您回答这个问题。我首先检查用户名和密码长度是否大于0,然后只检查内部编码,否则不检查代码
        String queryString =" select count(*) as \"exists\" from credit where username=? and password=?";
        //set this values using PreparedStatement
        ps = con.prepareStatement(queryString);
        ps.setString(1,f);
        ps.setString(2,s);
        ResultSet results = ps.executeQuery(); 

        if (results.next()) {
               int i = results.getInt("exists");
          if(i==1)
            {
                JOptionPane.showMessageDialog(null, "Username and Password exist");  
            }
            else{
                 JOptionPane.showMessageDialog(null, "Please Check Username and Password ");
            }
if (username.length()>0 && password.length()>0)
{
    String query = "Select * from adminlogin Where Username='" + username + "' and Password='" + password + "'";

    rs = sta.executeQuery(query);

   if (rs.next()) 
   {

        home hme=new home();
        this.setVisible(false);
        hme.setVisible(true);
   } 
   else 
   {
       JOptionPane.showMessageDialog(null,"username and password are wrong ");
   }
}
else
{
      JOptionPane.showMessageDialog(null,"please field username and password ");
}