每当我尝试获取ResultSet时,都会收到此错误。我在网上看了很长时间,有很多人和我有同样的问题,但他们的问题是他们使用PreparedStatement进行多次查询。
正如您在以下代码中看到的,我只使用了一次PreparedStatement。
getSQLConnection()方法返回一个全新的Connection。 错误被抛出:ResultSet rs = ps.executeQuery()
try (Connection connection = getSQLConnection();
PreparedStatement ps = connection.prepareStatement(qry);
ResultSet rs = ps.executeQuery()) {
return rs;
} catch (SQLException ex) {
plugin.get().getLogger().log(Level.SEVERE, "Couldn't execute SQL statement: ", ex);
}
之前我使用过SQL数据库,但从未这样做过。我很迷惑。希望你们能帮助我!
答案 0 :(得分:2)
当你使用try with resources时,你告诉Java在块本身完成执行后关闭try
子句中的所有资源。正如您所编写的那样,这包括ResultSet
,这意味着任何调用您的方法的人将永远无法使用该结果集。相反,您应该在try块中处理结果集:
try (Connection connection = getSQLConnection();
PreparedStatement ps = connection.prepareStatement(qry);
ResultSet rs = ps.executeQuery()) {
// process result set here
}
除了结果集将在调用者接收它时关闭,返回还有另一个问题,即JDBC调用的清理现在必须在两个地方完成。这是非常不受欢迎的,也是一个维护问题。