首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流DAO导致Java (设计模式)

流DAO导致Java (设计模式)
EN

Stack Overflow用户
提问于 2011-01-14 10:25:09
回答 4查看 2.6K关注 0票数 0

所述情况如下:

  • DAO,它查询表中的所有行,并将它们映射到域对象列表(纯JDBC)
  • 一种处理DAO产生的列表并将某些列表元素格式化为文件的服务。

这里的问题是,所有DAO结果都保存在内存中,这将随着表的增长而变得危险。

问题:是否有一种模式可以以流式方式从DAO读取对象,即服务一次只处理一个元素,将其写入文件输出流,然后从结果集中请求下一个元素?一般来说,使用ResultSet作为DAO的返回类型是个好主意吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-14 10:36:19

即使您公开了结果集(您不应该这样做),默认情况下仍然不会得到流语义。为此,你需要这样做:

代码语言:javascript
复制
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

您应该将其封装在DAO中,您可以返回一个自定义迭代器来处理结果。

请参阅关于流结果主题的mysql参考

票数 4
EN

Stack Overflow用户

发布于 2011-01-14 10:30:54

最好的方法是执行分页查询,您可以获得行的总数,然后选择一个页面大小并使用数据库工具(oracle的rowid)来获取页面,直到有了所有行,或者您可以一直查询直到没有结果。

票数 1
EN

Stack Overflow用户

发布于 2011-01-14 10:30:06

所以你只处理了一次给定的行?您可以在数据库中将该行标记为已处理,并且只对未处理的行进行选择。或者,您可以将处理过的行移动到不同的表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4690059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档