“ 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())

做。有人可以向我解释此代码吗?如果我对此有更好的了解,我相信我将对如何使用PreparedStatement结果以及用于rs的逻辑进行处理有一个更好的主意。同样,对改变这种逻辑的任何帮助也将不胜感激。

回答:

对于具体问题SQLException,您需要更换

ResultSet rs = stmt.executeQuery(sql);

通过

ResultSet rs = stmt.executeQuery();

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

也可以看看:

  • JDBC教程-使用准备好的语句


对于具体的问题rs.next(),它将光标从数据库中移至结果集的下一true行,否则返回false。与if语句(而不是while)结合使用,意味着程序员仅对第一行(即第一行)期望或感兴趣。

也可以看看:

  • ResultSet#next()方法的Javadoc
  • SQL问题,java中的ResultSet

以上是 “ if(rs.next())”是什么意思? 的全部内容, 来源链接: utcz.com/qa/429074.html

回到顶部