java - 将 Java SQL ResultSet 转换为对象或结构集

标签 java performance linq data-structures resultset

我的 Java 应用程序有一个 ResultSet,它是作为 SQL 查询执行的结果生成的。现在,为了工作(分析特定列内容,根据数据计算特定参数值,以在 UI 中表示数据)高效(两者:内存和性能)有了这些数据,我必须将其存储在一些数据集合中。

我的问题是:

  1. ResultSet的行存储在ArrayList中是否是一个好主意,或者有更适合需求的数据集合,描述上面?

  2. 我应该将每个 ResultSet 行转换为对象还是将其存储为普通结构?假设,ResultSet 的大小code> 矩阵大约是 5000 x 10,我不确定,开始在循环中生成 5000 个 Java 对象是一个好主意。

  3. 据我了解,对象创建是一项相当“繁重”的任务,因此,如果可以避免此操作,就应该这样做。 但是,从另一方面来说,LINQ 默认返回对象集而不是普通结构,因此,可能仍然值得将 ResultSet 转换为对象集合而不是对象集合结构?

  4. 是否有任何 Java 内置方法可以将 ResultSet 行转换为对象,或者我必须手动编写它?我知道,事实并非如此努力工作,但可能有一些现成的解决方案。

最佳答案

  1. 不,由于结果记录的数量可能非常大,并且您可能对这种粒度级别不感兴趣,因此我建议流式处理结果(例如只进游标)并存储聚合数据(例如在许多列表/ map 中)。此外,您可能需要考虑使用 SQL 引擎来聚合和计算值,而不是使用 Java 进行编码。

  2. 我建议使用对象而不是标量将结果存储在多个(聚合)映射中。 Google Guava 有一些可能有用的集合类。

  3. 对象创建并不繁重,但是您应该考虑内存占用,因为结果记录的数量可能很大。我建议在循环中聚合值,用聚合值填充一个或多个映射。您真的需要记录级别的粒度吗?可能不是。

  4. 有许多 ORM(对象关系映射)工具可用,例如 hibernate 。另外,Java 有一个“RowSet”类,用于在本地存储完整的结果集,但请谨慎使用(内存占用)

关于java - 将 Java SQL ResultSet 转换为对象或结构集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115961/

相关文章:

java - tomcat 7访问映射驱动器

java - 从本地触发远程服务器上的快照

java - 我应该 `new` 循环内部还是外部的对象?

linq - 有没有人用 Lambda 语法完成过 Linq 101 示例?

c# - 异步绑定(bind)和 LINQ 查询挂起

c# - 将 charArray 转换为 byteArray

java - 如何在运行时在 JFrame 中添加 JTable?

c++ - 编写此算法的更有效方法?

performance - 用于性能的 defclass 类型信息

java - 以特定方式乘以二维数组的大小?