关于分页显示的问题!

04-08-28 xuesenlin
    

分页显示有两种做法:一种是把所有的资料都查询出来,然后在页面中显示指定的资料;另一种是多次查询数据库,每次只获得本页的数据。

当然选择第一种代码就比较好写,同时也有既支持 Mysql又支持Ms SQL server 2000 的 SQL语句,比如:

ps=con.prepareStatement (selectSQL,ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

而第二种做法就比较麻烦了, 但是 在 Mysql 中和 Ms SQL server 2000中的SQL 语句 不一样,在Mysql 中用 ...limit N M ,,而Ms SQL server 2000 中用 top 也可以 ,问题是在什么情况下选择那种!我看到一段论文说::“考虑到数据往往是大量的甚至是海量的,如果一次性获取,那么这些数据必然会占用服务器大量的内存资源.” 到底"海量"是多大的呀,,? 千万条数据吗?这是一个问题!!

第二个问题是: 我想找一种折中的方法, 即用第二种方法查询数据库,但是 又要一个 既支持 Mysql 也支持 MS SQL server 2000 database的 SQL 语句 或是 什么好的方法?????

大家能不能提供一个好的方法ne ? 谢谢了,,,,

    

banq
2004-09-04 17:08

怎么能用第一种方法,万一数据巨大怎么办,你的Java系统就立即变慢。

批量查询参考Jive做法,配以缓存实现即可。

jsjjf
2004-09-07 12:45

我这两天也在为这个问题烦恼呢

不知道JIVE的缓存方法是如何实现的呢?

对于海量数据第一种方法肯定行不通,如果用第二种方法的有很失一般性

就是可能把程序做死了,如果换一种数据库的话,sql语句又要重新写了

如:把oracle的“rownum”改称sqlserver的limit

mysapphire
2004-09-07 15:53

JIVE方法是最好的一中解决思路,不过一般情况下你不必去那么实现它,毕竟写起来太累,要么就用现成的。 你说的第二种方法比较可取,一般分页都这么做的,其实你可以做得到通用的,毕竟数据库就那么几种嘛,自己写一个专门处理SQL语句分页的类不就行了? 再设定一个持久的全局配置参数来指明你现在用的是什么数据库。

vegetable318
2004-09-08 16:53

对于多个数据库的,楼主可以参考petstore的dao模式,,dao的具体实现是针对不同的数据库的,至于分页,楼主可以考虑,每次取几页的数据,存放在session,如果是同一个查询的get操作就直接从session中取值,如果是post操作,或者是get操作需要从新查询的,,就在调用该数据库查询操作,如果偏离了这个操作,可以清空session的内容,这样也不会有session占用太大资源的问题,当然此问题存在一个浏览器后退的问题,如果是这样,可是根据是不是上次的操作条件重新查询,这个关键就是判断你所执行的get操作到底是查询数据库还是取session的东东了.

3Go 1 2 3 下一页