我有一个非常常见的封装问题。我正在通过 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/