发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

查询数据库后是返回ResultSet还是返回Collection 之我见

2002-12-12 09:08
赞助商链接

看了查询数据库后是返回ResultSet还是返回Collection的讨论之后,我深有感触,大家对Iterator Object的含义并不清楚,我说说我得看法
1。Object既不象Vector那样存储数据,也不象List那样存储对象的引用。
2。比如你用ResultSet.Iterator(),返回的是ResultSet的一个内部类的引用。
3。所以返回Iterator根本不存在内存浪费的问题,所以大家不要画蛇添足,就按SUN给的示例去做就行了。
4。至于板桥说得JIVE中大量的Iterator,是因为要是你的类有Iterator的功能,就必须自己编写Iterator,JDK中没有可重载的。
5。ResultSet在Statment关闭后一定会出错(如果你的Select返回的结果很多的话),因为不会有哪个JDBC傻的把所有的返回结构复制到ResultSet中。它是用多少取多少,在加一些缓存。板桥说不出错是因为读的是缓存。

2002-12-12 09:14

(更改版)
看了查询数据库后是返回ResultSet还是返回Collection的讨论之后,我深有感触,大家对Iterator Object的含义并不清楚,我说说我得看法
1。Iterator Object既不象Vector那样存储数据,也不象List那样存储对象的引用,他傻也不存。
2。比如你用ResultSet.Iterator(),返回的是ResultSet的一个内部类的引用。你调用Iterator.next()其实还是ResultSet.next()。大家可以看看SCJP中关于内部类的说明。
3。所以返回Iterator根本不存在内存浪费的问题,所以大家不要画蛇添足,就按SUN给的示例去做就行了。
4。至于板桥说得JIVE中大量的Iterator,是因为要是你的类有Iterator的功能,就必须自己编写Iterator,JDK中没有可重载的。
5。ResultSet在Statment关闭后一定会出错(如果你的Select返回的结果很多的话),因为不会有哪个JDBC傻的把所有的返回结构复制到ResultSet中。它是用多少取多少,在加一些缓存。板桥说不出错是因为读的是缓存。

2002-12-12 13:25

iterator实际是指针。

有人认为返回collection比返回iterator好,你如何认为?

2002-12-13 00:38

Collection is just an interface, your collection impl internally use still can still use iterator, normally container handle this way when EJB local findObjectsByXXX is invoked.

2002-12-13 20:28

其实返回Collection和iterator,各有优缺点。iterator开销小,但他破坏了封装型。是外部类可以操作类内部的私有变量。这正是内部类的两面性。所以不应一概而论,主要看你设计的侧重点了。

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com