【问题标题】:Operation not allowed after ResultSet closed error even if the PreparedStatement is used only once即使 PreparedStatement 仅使用一次,ResultSet 关闭错误后也不允许操作
【发布时间】:2017-03-02 04:11:46
【问题描述】:

每当我尝试获取 ResultSet 时都会收到此错误。我在网上看了很长时间,有很多人和我一样的问题,但他们的问题是他们使用 PreparedStatement 进行多个查询。

正如您在下面的代码中看到的,我只使用了一次 PreparedStatement。

getSQLConnection() 方法返回一个全新的连接。 报错就行了: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 数据库,但从未这样做过。我很困惑。希望大家帮帮我!

【问题讨论】:

    标签: java sql


    【解决方案1】:

    当您对资源使用 try 时,您告诉 Java 在块本身完成执行后关闭 try 子句中的所有资源。如您所写,这包括ResultSet,这意味着调用您的方法的人将永远无法使用该结果集。相反,您应该在 try 块中处理结果集:

    try (Connection connection = getSQLConnection();
            PreparedStatement ps = connection.prepareStatement(qry);
            ResultSet rs = ps.executeQuery()) {
    
        // process result set here
    }
    

    除了结果集将在调用者收到它时关闭之外,返回还有另一个问题,即您的 JDBC 调用的清理现在必须在两个地方完成。这是非常不受欢迎的,并且是一个维护问题。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2017-04-17
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多