如何防止ResultSet在Connection关闭时失效?

Iva*_*van 2 java database-connection scala jdbc resultset

我想从执行查询的函数中传出结果集并关闭连接.

但是,只要其父Connection关闭并抛出,ResultSet就会失效

java.sql.SQLException: Operation not allowed after ResultSet closed
Run Code Online (Sandbox Code Playgroud)

怎么避免这个?

Boz*_*zho 7

你不能.如果要获取所有数据,请循环ResultSet并将数据插入到您的集合中.

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


ped*_*rla 6

还要考虑使用断开连接的结果集:CachedRowSet.快速谷歌搜索给了我:使用CachedRowSet在类之间传输JDBC查询结果.


Kev*_*ght 5

你想把你的想法彻底改变!

创建一个将对ResultSet执行某些操作的函数,并将其作为闭包传递给运行查询的函数.

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)
Run Code Online (Sandbox Code Playgroud)