我正在尝试使用从数据库中获取记录来创建登录表单,当记录位于第一个位置时它会成功运行,但是当它位于第二个位置时,它首先显示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");
}
}
答案 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
}
}