java – “if(rs.next())”是什么意思?

我目前收到错误,

java.sql.SQLException: Method 'executeQuery(String)' not allowed on prepared statement.

因为我正在使用

PreparedStatement stmt = conn.prepareStatement(sql);

还有

ResultSet rs = stmt.executeQuery(sql);

在我的代码中.

我现在需要删除ResultSet行,但这使我不得不处理以下代码:

if (rs.next()) {
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("login.successful"));
    request.getSession(true).setAttribute("USERNAME", rs.getString("USERNAME"));
    request.getSession(true).setAttribute("BALANCE", rs.getString("BALANCE"));
    request.setAttribute("msg", "Logged in successfully");

我不确定我完全明白什么

 if (rs.next())

确实.有人可以向我解释这段代码吗?如果我对此有了更好的理解,我相信我会更好地了解如何使用用于rs的逻辑来处理PreparedStatement结果.此外,任何有助于改变逻辑的帮助也将受到高度赞赏.

解决方法:

至于SQLException的具体问题,您需要替换

ResultSet rs = stmt.executeQuery(sql);

通过

ResultSet rs = stmt.executeQuery();

因为您使用的是PreparedStatement子类而不是Statement.使用PreparedStatement时,您已经将SQL字符串传递给Connection#prepareStatement().您只需在其上设置参数,然后直接调用executeQuery()方法而无需重新传递SQL字符串.

也可以看看:

> JDBC tutorial – Using Prepared Statements

至于关于rs.next()的具体问题,它将光标移动到数据库结果集的下一行,如果有任何行则返回true,否则返回false.结合if语句(而不是while),这意味着程序员只期望或感兴趣的是第一行,即第一行.

也可以看看:

> Javadoc on ResultSet#next() method
> Problem with SQL, ResultSet in java

上一篇:hdu 1159, LCS, dynamic programming, recursive backtrack vs iterative backtrack vs incremental, C++ 分类: hdoj 2015-07-10 04:14 112人阅读 评论(0) 收藏


下一篇:java.sql.SQLException:ResultSet关闭MySQL Java后不允许操作