java - 封装 JDBC 结果集

标签 java arrays jdbc resultset encapsulation

我有一个非常常见的封装问题。我正在通过 jdbc 查询表,并且需要将记录保存在内存中一段时间​​以进行处理。我没有任何用于同一个表的 hibernate POJO 来创建任何对象并保存。我正在谈论单个查询中的负载,例如 2 亿。

常见的方法是创建一个对象数组并在需要使用它们时进行转换。 (假设,我可以获得表详细信息,例如列名和数据类型,这些详细信息将保存在一些引用表中。。)但是这种方法将非常昂贵(时间)我猜当考虑到负载时......

任何好的方法都会受到赞赏......

最佳答案

听起来像 CachedRowSet就可以在这里解决问题了。这正是你想要的。它将需要一个 ResultSet 并吸收整个内容,然后您可以在闲暇时处理它。

附录:

I am really looking for a robust record holder with easy access on the members

但这几乎正是 CachedRowSet 的本质。

它管理具有命名(和编号)列的记录集合,并提供对这些列的类型化访问。

CachedRowSet crs = getACachedRowSet();
crs.absolute(5) // go to 5th row, shows you have random access to the contents.
String name = crs.getString("Name");
int age = crs.getInt("Age");
date dob = crs.getDate("DateOfBirth");

虽然我确信您可以自己编写一些内容,但 CachedRowSet 可以为您提供所需的一切。如果您不想实际将数据加载到 RAM 中,则可以仅使用 ResultSet。

唯一的缺点是它不是线程安全的,因此您需要围绕它进行同步。但这就是生活。 CachedRowSet 究竟是如何无法满足您的需求的?

关于java - 封装 JDBC 结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554084/

相关文章:

java - TOMCAT如何在系统中定位JRE?

java - 无法使用 Javamail 1.4.5 连接到 Gmail 的 SSL-IMAP

java - BufferedReader.lines() 方法在 Windows 上锁定

javascript - 如何使用knout js循环显示文本

使用运行时调用 python 脚本时的 Java.Error

arrays - 工作表函数.Small : How to define Array

Python:关于 "numpy.ndarray"的两个问题

java - 连接到 oracle 10g 数据库时获取 IOException "got minus one from a read call"

java - DBUtils - 使用 ResultSetHandler

java - OpenCsv | SQL |只写入表头,不写入表格内容