看了大家发言,我也来说两句:
1。首先关于JDBC的调用的问题,RS,ST,CONN的关闭是需要一定顺序的,
SQLUtil.safelyCloseResultSet(rs);
SQLUtil.safelyCloseStatement(pstQuery);
SQLUtil.safelyCloseConnection(connection);
如果你关闭ST和CONN,而继续使用RS的话,可能在某些平台(JVM)某些JDBC driver上能运行通过,但
不保证都能在所有java vm上通过。应为你违反了java spec.我想这种方式是应该不提倡的。
2。关于Jive的数据库调用的问题(iterator)
因为jive是个bbs,所以jive中所有的问题都采用id的分配方式来确定一个概念(祥见数据库设计)。
id的概念在很大程度上能够解决bbs的需求问题。Jive返回的iterator其实是通过装载数据库某个实体的
全部PK(即id)进行定位的。load实体的时候是通过objectfactoy装载实体的(里面就有cache)了。
其实这里有两个问题:
a。实体对象的规模。
b。实体对象排序。
如果实体对象的规模过大,即不是bbs系统了。jive的方式会crash的。因为jive装载了所有的PK
jive不能返回对象级排序(根据实体的某个属性)的实体iterator
但jive对bbs来说,这种实施方式已经是够了。
3.关于ResultSetPage的概念。
其实这个就是为了解决实体对象规模的问题。采用page的概念划分RS.减少数据返回大小(用RS的next功能)。
4.查询数据库后是返回java.sql.ResultSet还是返回Collection.
要是你在Collection里面依然采用直接包装ResultSet的方式,在性能上没有丝毫好处。唯一的好处是
对jsp程序员屏蔽了RS的访问。
Collection需要对java.sql.ResultSet的数据进行page的包装。才有性能上的效果。