从数据库中取数据的翻页问题?

想问问你们在取大量数据过程中,对翻页是怎么进行处理的?
1、根据sql语句(进行记录集的分隔)。
2、根据大对象(进行大对象的分块)。
希望大家能具体的谈谈!

斑竹你做的翻页还蛮快的,不知是怎么处理的?
jive中有这样的例子吗?

jive中是根据sql语句(进行记录集的分隔)这个办法做的。
你可以看看jive中源程序,它做法很普通和简单,好像是逐个数数到指定的起始点

我做了一个分页函数,传进去整个List,传出要显示的部分List,和Html码。这样,无论怎么改sql语句,我得函数都不用变。

你的封装概念还是比较强大,不过界面功能用OO概念设计是比较难的

是的啊,不过就像是一个过滤器(Decorator??),在BS结构上也可以用。

jive和pet Store好象都是通过先生成一个记录集,然后将光标定位到开始位置,jive中好象用的是rs.next()来一条条的下移定位,而pet Store用的是jdbc2.0中的rs.absolute()来定位的。然后将到的区间记录集对象化后传给一个List,这个List就是在页面上显示的页记录了。

但是我有一个问题,就是每次翻页都要先生成一个很大的记录集,然后定位,从大的记录集中得到小块记录集。每翻页生成一个很大的记录集,和定位,效率会不会低啊?比如对10000条记录作每10条分页,每次翻页都先得到10000条记录的记录集,例如翻到每999页,如果是jdbc1.0就要rs.next()循环9990,jdbc2.0中的rs.absolute()还好一点。

CC: 传进去整个List,传出要显示的部分List,传进去整个List是不是全个记录集啊,传出要显示的部分List就是分页后的小记录罗。好象有上面同样的问题哦。

我的想法是只要得到大的记录集一次,每次翻页不要每次生成大的记录集,大家有没有好的方法!

这个的话就需要用特定的sql语句来实现了,例如mysql中使用 limit
或者你可以是存储过程来实现也是可以的。

我用的是MVC结构,“大List”只有一个。

这样实现的,Model传出“大List”给View(jsp页面)。在View中过虑一下,得到“小List”,选择“下一页”,这时候一定不能通过Control,不然,Model又会生成“大List”。所以,可以直接从View与View之间跳转,“下一页”的那个View接到参数与“大List”再执行过虑,生成它自己的“小List”.

其实,View与“下一页View”是同一个页面。

你们懂了么?一定要明白MVC的意义。当然,我指的MVC并不等于Structs。MVC是思想与框架上的东东,不绝对指定某项技术。

我现在想用oracle中的rowno,原理可能同楼上差不多,对第一次的记录集进行分段,如:100条记录,分10页,可以保存9个分段区间,每次翻页就可以用每个分段区间作为条件查询得到10条记录。这好象可以,但不能得到数据库中最新数据,而且依赖数据库的特性,移植性差。但效率好象高一点 。

请大家比较这两种方法吧,我不知选哪一种好。有没有更好的方法。

CC: MVC我不懂。

你的Model传出“大List”给View(jsp页面),是不是要将大List保存啊,再通过“大List”生成"小List"。你的“大List”保存在哪里?

保存在Model啊,它相当于sessionBean

. Java Pet Store用的架构设计是所谓的MVC design pattern。MVC是Model-View-Controller的简写,是design pattern的一种,源自Smalltalk。以往开发这种大型应用程序常常把不同用途的各部分程序都混在一起,造成项目成员分工不清,系统也很难维护。MVC design pattern则是将对象分成三类,Model对象专门用来包装应用程序的状态,View用来负责屏幕上的展现,Controller则负责定义应用程序的各种动作和反应。Java宠物店系统利用MVC Pattern设计整个系统架构,将各层的对象清楚地分开。.NET的宠物店则是完全采用自己定义的架构,所以在一开始就和原来的范例完全不一样。

翻页问题和mvc有什么关系?
mvc只是一种模式,在一些应用中可以看作一种架构,这个和功能实现好象没有太大关系吧。struts不等于mvc,它只是mvc的一种实现,mvc与mvc还有很多差别吗?为什么说model直接给view一个list? 在model直接实现return list ?mvc结构好象不是这样的吧!

如果显示的数据和数据库中的数据没有同步,是不是不能满足很多情况的需求?不要返回所有数据!如果有1000万条记录呢,那你的翻页将会是噩梦。