我的结果集总是返回false

时间:2014-08-18 13:06:09

标签: java

我写了以下代码:

String username=request.getParameter("username");
System.out.println(""+username);
String password=request.getParameter("password");
System.out.println(""+password);
Connection con=getConnection.getConnectionBuilder();
System.out.println("Inside");
PreparedStatement pstmt=con.prepareStatement("Select password from users where username=? ");
pstmt.setString(1, "username");

ResultSet rs=pstmt.executeQuery();

try
{
 System.out.println(""+rs.next());
    while(rs.next())
 {
    String pass=rs.getString(1);
    System.out.println(""+pass);
    if(pass.equals("password"))
    {
        out.print("Welcome back"+username);
    }
    else
    {
        out.print("Wrong username/password combination");
    }
}


}    

    catch(Exception e)
   {
     e.printStackTrace();
   }
pstmt.close(); 
con.close();

我的rs.next()部分总是被评估为false。怎么会这样发生呢?

3 个答案:

答案 0 :(得分:8)

请勿拨打rs.next()两次:

 System.out.println(""+rs.next());
    while(rs.next())

每次调用它时都会移动迭代器。

因此,如果您的查询返回一行,则第一个rs.next()移动迭代器指向该行,但第二个rs.next()返回false,您永远不会进入while循环。< / p>

删除System.out.println(""+rs.next());行应有助于解决您的问题。

此外,您正在搜索名为“username”的用户名,该用户名可能不存在,并将返回的密码与“密码”进行比较,这可能是错误的。

修复所有这些问题会给你这个代码:

pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();

try {
  while(rs.next()) {
    String pass=rs.getString(1);
    System.out.println(""+pass);
    if(pass.equals(password)) {
        out.print("Welcome back"+username);
    } else {
        out.print("Wrong username/password combination");
    }
  }
}     
catch(Exception e) {
  e.printStackTrace();
}

答案 1 :(得分:3)

您正在为字符串&#34;用户名&#34;。

设置用户名

尝试使用您的变量:pstmt.setString(1, username);

答案 2 :(得分:0)

你两次调用rs.next(),每次移动行迭代器。

您可能想要省略有效&#34;吃&#34;的println()。你的第一个(也是唯一显而易见的)行。

另外,正如@dasblinkenlight在评论中所述 - 不要以明文形式存储密码。只要问Target,Adobe和其他为什么不......

干杯,