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

xzyjava 02-12-12

看了查询数据库后是返回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中。它是用多少取多少,在加一些缓存。板桥说不出错是因为读的是缓存。

xzyjava
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中。它是用多少取多少,在加一些缓存。板桥说不出错是因为读的是缓存。

banq
2002-12-12 13:25

iterator实际是指针。

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

Jevang
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.

xzyjava
2002-12-13 20:28

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