2016-03-08 30 views
1

在下面的代码片段中,总是调用else。即使已成功输入while块,也不会输入ifif(rs.next())块放在while(rs.next())之后永远不会输入

while (rs.next()) { 

    username = rs.getString(2); 
    password = rs.getString(3); 

} 
if(rs.next()) 
{ 
    response.sendRedirect("Welcome.jsp"); 

}   
else { 
    response.sendRedirect("Fail.jsp"); 
} 

这是如何造成的,我该如何解决?

+0

这是什么问题? – jdabrowski

+0

我把正确的用户名和密码,我被重定向到fail.jsp而不是welcome.jsp – JohnnySparow

+0

这是危险的代码。你在'init()'方法中打开一个连接,并且永远不要关闭它。连接通常会在请求/响应中获取并返回 –

回答

1

你可能想要的东西:

if(rs.next()) { 
    username = rs.getString(2); 
    password = rs.getString(3); 
    response.sendRedirect("Welcome.jsp"); 
} else { 
    response.sendRedirect("Fail.jsp"); 
} 
+0

谢谢,你解决了这个问题 – JohnnySparow

0

看一看结果集herenext()方法的文档。

当对next方法的调用返回false时,光标位于最后一行之后的 。

所以,当while循环出来时,光标已经到达最后一行之后的位置,因此rs.next()永远不会返回true。我沃尔德想建议一些改动:

  • 添加一个标志被设置为控制的真实while循环进入内部而循环,然后检查是否有该标志,如:

    boolean exists = false; while(rs.next(){ exists = true; //other logic } if(exists){ response.sendRedirect("Welcome.jsp"); }

  • 在代码中添加适当的exception handling

相关问题