我目前收到错误,

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

because I am using

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

做。

答案

至于具体问题SQLException,你需要更换

ResultSet rs = stmt.executeQuery(sql);

经过

ResultSet rs = stmt.executeQuery();

因为你正在使用PreparedStatement子类而不是StatementPreparedStatement,您已经将 SQL 字符串传递给Connection#prepareStatement()executeQuery()直接调用方法,无需重新传递 SQL 字符串。

也可以看看:


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

也可以看看:

来自: stackoverflow.com