0

我正在尝试制作一个从数据库中获取记录的登录表单,它在记录位于第一个位置时成功运行,但当它位于第二个位置时,它首先给出未找到记录的输出,然后找到记录。

这是我的实例代码。

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

2 回答 2

3

您不需要 for 循环,下面的代码可以工作,但这效率不高,所以请向我们发布您使用过的查询,

使用select * from table_name where username=x and 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");
于 2013-10-10T02:45:36.443 回答
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
    }   
}
于 2013-10-10T08:02:48.557 回答