代码之家  ›  专栏  ›  技术社区  ›  Ivan

如何防止结果集在连接关闭时失效?

  •  2
  • Ivan  · 技术社区  · 14 年前

    我想从一个执行查询并关闭连接的函数中传递一个结果集。

    java.sql.SQLException: Operation not allowed after ResultSet closed
    

    如何避免这种情况?

    4 回复  |  直到 13 年前
        1
  •  7
  •   Daniel C. Sobral    14 年前

    你不能。如果你想得到所有的数据,循环 ResultSet

    看一看 commons-dbutils -它有很多有用的助手。

        2
  •  6
  •   bluish dmajkic    13 年前
        3
  •  5
  •   Kevin Wright    14 年前

    你想把你的想法翻个底朝天!

    并将其作为闭包传递到运行查询的函数中。

    def withQuery[T](query:String)(template: ResultSet => T) : T = {
      val resultSet = runQuery(query)
      val ret = template(resultSet)
      resultSet.close
      ret
    }
    
    val output = withQuery("select * from ...") {
      resultSet =>
      //some expression that generates a string from the resultset
    }
    
    println(output)
    
        4
  •  2
  •   Brad Mace Mike King    14 年前

    结果集不是这样工作的。它不存储数据本身,它只是充当数据的接口。

    你可以试着让这个类返回 ResultSet 我们保留一份已经分发的名单。使用ResultSet的每段代码都可以调用 close() 当它完成的时候。然后,第一个类可以检查已发出的所有结果集是否已关闭(使用 isClosed()