我的分页有些简单,不知大家是怎么看我的分页的?

我主要用一个JAVA完成分页程序。他是传出分段的记录集的。也就是RS了,在JSP中调用时得到这个记录集。

我说的list不是全部记录,只是本页需要的记录。不会很多。

我最近也在看,其中有讲到分页不过,没太理解,资料有没在身边,回去在看一下.不过先说几句:struts中有个FomrBean.java它是存储通过MODEL处理后的内容的,所以你们讨论的控制器处理大LIST,我认为不对,MVC强调的就是控制器servlet只负责流程控制,它不会也不应该存储内容的.
原来我记得分页是用游标定义位置的吧,而游标好象是JSP1.2才开始支持的.具体怎么写,不好意思我又忘了,不知是不是一堆废话.仅供参考吧.回去我在看一下.

个人认为要看jdbc驱动的支持,rs.absolute()就很好用,pet store里的page对象我一直在用,但没有经过大数据量的测试。
controler不是用来cache date的,cache应该由更底层去实现(比如说database本身去支持),或者在硬件上由cache server来保证。

这里并没有想用controller 来cache data 。只是认为数据显示请求也作为一种对view 对 model的请求,通过controller去调度

这样的应用也是会用到的。
我们给移动做的项目里面一条需求是查询用户的通话清单,每次到boss
系统里面取回来的是符合查询条件的某一个用户的所有清单记录,但展示
的时候有可能会会分成n个页面,这样用户请求下一页的时候就不需要再
次请求boss系统了。尤其是boss系统压力比较大的时候,这样做很有用。

oracle? i know:

SELECT * FROM
(SELECT ROWNUM rn FROM
( SELECT * FROM TBL WHERE xxx ORDER BY xxx
)
)
WHERE rn BETWEEN 1 AND 10

关于翻页,我说点自己的看法吧。
对于翻页的sql方面,我觉得最好选择通用的sql,不要选择那些某些数据库支持的函数的sql。
对于rs.absolute(),这与jdbc的驱动版本有关,通用性不强。
我以前常用的方法有点像浆糊那种,controller来进行数据的读取,这个时候读取的是相应页数的几条纪录而已,然后一般把这个Iterator request.setAttribute();然后到jsp页面get出来就可以了。这样传递的记录数就相应少,但是需要每次访问数据库。
而cc的方法,按我的理解,好像是把页面的元素都封装成了model,这个model比较广义,翻页的数据只是model中的一个元素。(不知道是否说对了)但是cc的方法如何传递我没搞清楚。

至于struts有这样的一个解决方法。首先要把翻页的数据取出来,然后在jsp页面中struts提供有一个标签,可供翻页。好像struts这种方式不需要每次读取数据库,但是像是把所有的数据保存到PageContext中,再由他自己的方式传递。如果使用到struts的话,我们要做的事情比较简单一点,只需要把所有数据一次性取出来,然后再由struts的标签做控制好了。

structs做的不错。

我得方法比较浪费资源,因为我把数据放到Model里,Model放到了session里了。

struts保存的数据的scope好像是page类型。
我觉得session会更消耗资源吧,因为除非手动清除或者超时否则会一直占着资源的。

原来我一直不是很清楚cc保存在model的数据如何传递,原来是用session.

觉得用session保存不是很好。
对于用rs.absolute()对记录光标定位与用while(rs.next())进行定位我用2000多条记录测试了一下。

while(rs.next())方法是pet Store以前的版本中使用的(第一种方法)。rs.absolute()是现在版本中使用的(第二种方法),配合page对象。

对于这2000多条(分200多页)测试记录,第一种方法要比第二种好。对前面的页处理很快。每翻一页大约是10-20ms左右,但到了最后几页大约是60-70ms左右。用第二种方法,每页都是50-70ms之间。

如果是100万条的话,对于第一种方法会使在于后面几页会比较慢点,对于第二种方法可能好一点,具体是多少我还没有这么多的数据进行测试。

感谢andrawu为我们提供这样的测试数据,以后我们使用就有数了

大家说了这么些,要不来点实际的代码吧?!看着代码就不会出现歧义了,也更加的明显了。

看看hibernate的分页程序,会好些