【问题标题】:Check username and password in java DataBase and give wrong password message if false检查java数据库中的用户名和密码,如果错误则给出错误的密码信息
【发布时间】:2013-11-19 15:01:01
【问题描述】:

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

问题是它对每一行执行 if else 语句,直到它到达正确的行 b4 显示“用户名和密码正确”,但我希望它检查所有内容,如果它不存在,则显示“请检查用户名和密码”

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

这是我的 cmets 代码

 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);
        }

【问题讨论】:

标签: java sql ms-access while-loop executequery


【解决方案1】:

不,你做错了。

加载所有记录不是检查凭据的好习惯。

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

1)如果不存在用户,告诉username不存在。

2)如果用户存在,则检查 password 是否与现有数据库用户 password.

【讨论】:

  • 小心sql注入
  • 我可以给我这个编码吗?
【解决方案2】:

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

   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
    }

【讨论】:

  • dnt 理解您的代码..当输入的用户名或密码在数据库中不存在时,我想要实现的是错误的用户名或密码通知
  • 唯一的主要问题是它很容易发生 SQL 注入,现在刚刚尝试过,因为我是安全专家,但还是谢谢
【解决方案3】:

使用 flag 你可以轻松解决这个问题。像这样..

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);
    }

【讨论】:

    【解决方案4】:
    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 ");
    }
    

    【讨论】:

    • 我认为这段代码可以帮助你回答这个问题,我首先检查用户名和密码长度大于 0,然后只检查内部编码,否则不检查代码
    【解决方案5】:

    你可以使用:

        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();
    

    【讨论】:

    • 如果正确的用户名和密码在第 3 行,则 else 结果在下一个结果正确之前给出 2 次,这是我的主要问题
    • 对不起,在我的代码中,如果结束了。我编辑它。但我建议您使用第二种解决方案。
    【解决方案6】:
            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 ");
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-04
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多