我有一个非常常见的封装问题。我正在通过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到底如何不能满足您的需求?