在使用JDBC检索查询结果时,我使用ResultSet,如下所示: ResultSet result_set = statement.executeQuery(query);个 在文档中,它是这样写的:"ResultSet对象维护指向其当前数据行的游标."这意味着,如果我在解析查询结果之前执行result_set.close(),则会丢失它们.如果我立即解析ResultSet中的数据,那么在解析过程中我将保持与数据库的连接.我想最大限度地减少时间,我想在不连接到数据库的情况下解析查询结果.

有没有一种方法可以存储查询数据,使我可以在解析结果之前关闭与数据库的连接?

例如,如下所示:

Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet result_set = statement.executeQuery(query);
// store data retrieved from query
result_set.close();
statement.close();
connection.close();
// do something with stored data

推荐答案

RowSet

javax.sql.rowset包扩展了ResultSet,增加了各种功能.

特别是,CachedRowSet将行的数据复制到内存中.引用文档:

CachedRowSet对象是在内存中缓存其行的数据行的容器,这使得在不总是连接到其数据源的情况下进行操作成为可能.

CachedRowSet对象是断开连接的行集,这意味着它只短暂地使用到其数据源的连接.

诀窍是找到一个有能力的接口的具体实现.Oracle提供了Sun时代的开源参考实现.但是,正如我回忆的那样(我可能是错的),该实现有一些没有得到解决的限制或缺陷.一定要彻底测试.

Java相关问答推荐

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

如何让TaskView总是添加特定的列来进行排序?

无法在Java中将hhmmss格式的时间解析为LocalTime

在Java中测试DAO方法:假实现与内存数据库

在Java Stream上调用collect方法出现意外结果

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

try 创建一个对象,使用它,然后使用一条语句将其存储为列表

在Spring Boot中使用哪个Java类来存储创建时间戳?

Bean定义不是从Spring ApplationConext.xml文件加载的

对字符串长度进行排序,但颠倒了顺序(最长字符串在前)

Java中将文本拆分为数字或十进制数字和字符串

匹配一组字符或另一组字符

没有使用Lombok生成的参数

Cordova Android Gradle内部版本组件不兼容

如何在Java springboot中从一个端点发送多个时间响应?

无法使用Open WebStart Java 8运行jnlp

无限递归Java问题

如何在Spring Boot Auth服务器上正确配置CORS?

";home/runner/work/中没有文件...匹配到[**/pom.xml];Maven项目的构建过程中出现错误

如何使JOOQ渐变脚本不重新创建表未更改的类?