我正在尝试使用从数据库中获取记录来创建登录表单

时间:2013-10-10 02:26:54

标签: java

我正在尝试使用从数据库中获取记录来创建登录表单,当记录位于第一个位置时它会成功运行,但是当它位于第二个位置时,它首先显示Record not found输出,然后记录Record。

这是我的实例代码。

for(int i=1;i<noOfColumn;i++)
{        
    while(rs.next())
    {
        if(x.equals(rs.getString(1)))
        {
            if(kk.equals(rs.getString(2)))
            {
                JOptionPane.showMessageDialog(l1, "Logged in successfully");
                break;
            }
        }
        else
            JOptionPane.showMessageDialog(b1, "Log in Failed");
    }
}

2 个答案:

答案 0 :(得分:3)

您不需要for循环,下面的代码可以正常工作,但效率不高所以请将查询中的内容发给我们,

使用 select * from table_name where username = x和password = kk 等查询。 如果您有任何带有有效用户名和密码的记录,那么您的while循环将被执行。

PreparedStatement statement = sqlConnection.prepareStatement("SELECT userId, password FROM login where username=? and password=?");
statement.setString(1, unametype);
statement.setString(2, passwordtype);
ResultSet rs = statement.executeQuery();
// It is better to use prepared statement rather than executing sql strings directly. Because if you use sql string you might face sql injection attacks


boolean flag=false;

while(rs.next())
{
    flag=true;       
}

if(flag)
   JOptionPane.showMessageDialog(l1, "Logged in successfully");
else
  JOptionPane.showMessageDialog(b1, "Log in Failed");

答案 1 :(得分:0)

我不认为你需要一个for循环 你必须通过执行你的sql语句来获取结果集,并像

一样迭代它
PreparedStatement statement = sqlConnection.prepareStatement("SELECT userId, password FROM login where username=? and password=?");
statement.setString(1, unametype);
statement.setString(2, passwordtype);
ResultSet rs = statement.executeQuery();
while(rs.next()){
    if(rs.getString(1).equals(usernametype)){
       if(rs.getString(2).equals(passwordtype)){
          // successful message
       }else{
          // invalid password
       }
    }else{
       // invalid username
    }   
}