所述情况如下:
JDBC)这里的问题是,所有DAO结果都保存在内存中,这将随着表的增长而变得危险。
问题:是否有一种模式可以以流式方式从DAO读取对象,即服务一次只处理一个元素,将其写入文件输出流,然后从结果集中请求下一个元素?一般来说,使用ResultSet作为DAO的返回类型是个好主意吗?
发布于 2011-01-14 10:36:19
即使您公开了结果集(您不应该这样做),默认情况下仍然不会得到流语义。为此,你需要这样做:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);您应该将其封装在DAO中,您可以返回一个自定义迭代器来处理结果。
请参阅关于流结果主题的mysql参考。
发布于 2011-01-14 10:30:54
最好的方法是执行分页查询,您可以获得行的总数,然后选择一个页面大小并使用数据库工具(oracle的rowid)来获取页面,直到有了所有行,或者您可以一直查询直到没有结果。
发布于 2011-01-14 10:30:06
所以你只处理了一次给定的行?您可以在数据库中将该行标记为已处理,并且只对未处理的行进行选择。或者,您可以将处理过的行移动到不同的表中。
https://stackoverflow.com/questions/4690059
复制相似问题