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

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

任何好的方法将不胜感激...

最佳答案

听起来像CachedRowSet可以解决这个问题。那几乎就是您想要的。它需要一个ResultSet并将整个过程吸下来,然后您可以在闲暇时进行处理。

附加物:


  我真的是在寻找一个功能强大的记录保存器,并且可以轻松访问成员


但这几乎就是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到底如何不能满足您的需求?

08-07 04:25