我目前收到错误,
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
子类而不是Statement
。PreparedStatement
,您已经将 SQL 字符串传递给Connection#prepareStatement()
。executeQuery()
直接调用方法,无需重新传递 SQL 字符串。
也可以看看:
至于具体问题rs.next()
,它将光标移动到数据库结果集的下一行并返回true
如果有任何行,否则false
。if
声明(而不是while
)这意味着程序员只期望或只对一行(第一行)感兴趣。