JiveJdon Community Forums
在线200人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 12 回复 / 1
 发表新帖子   回复该主题贴
xuesenlin

悄悄话
发表文章: 29
注册时间: 2003年09月15日 16:53
关于分页显示的问题! 2004年08月28日 17:55 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 自动分页(38)     
分页显示有两种做法:一种是把所有的资料都查询出来,然后在页面中显示指定的资料;另一种是多次查询数据库,每次只获得本页的数据。
当然选择第一种代码就比较好写,同时也有既支持 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

悄悄话
发表文章: 9312
注册时间: 2002年08月03日 17:08
Re: 关于分页显示的问题! 2004年09月04日 17:08 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
怎么能用第一种方法,万一数据巨大怎么办,你的Java系统就立即变慢。
批量查询参考Jive做法,配以缓存实现即可。
jsjjf

悄悄话
发表文章: 10
注册时间: 2004年05月25日 12:44
Re: 关于分页显示的问题! 2004年09月07日 12:45 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
我这两天也在为这个问题烦恼呢
不知道JIVE的缓存方法是如何实现的呢?
对于海量数据第一种方法肯定行不通,如果用第二种方法的有很失一般性
就是可能把程序做死了,如果换一种数据库的话,sql语句又要重新写了
如:把oracle的“rownum”改称sqlserver的limit
mysapphire

悄悄话
发表文章: 33
注册时间: 2003年12月29日 15:03
Re: 关于分页显示的问题! 2004年09月07日 15:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
JIVE方法是最好的一中解决思路,不过一般情况下你不必去那么实现它,毕竟写起来太累,要么就用现成的。 你说的第二种方法比较可取,一般分页都这么做的,其实你可以做得到通用的,毕竟数据库就那么几种嘛,自己写一个专门处理SQL语句分页的类不就行了? 再设定一个持久的全局配置参数来指明你现在用的是什么数据库。
vegetable318

悄悄话
发表文章: 13
注册时间: 2004年07月02日 11:02
Re: 关于分页显示的问题! 2004年09月08日 16:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
对于多个数据库的,楼主可以参考petstore的dao模式,,dao的具体实现是针对不同的数据库的,至于分页,楼主可以考虑,每次取几页的数据,存放在session,如果是同一个查询的get操作就直接从session中取值,如果是post操作,或者是get操作需要从新查询的,,就在调用该数据库查询操作,如果偏离了这个操作,可以清空session的内容,这样也不会有session占用太大资源的问题,当然此问题存在一个浏览器后退的问题,如果是这样,可是根据是不是上次的操作条件重新查询,这个关键就是判断你所执行的get操作到底是查询数据库还是取session的东东了.
laoer

悄悄话
发表文章: 35
注册时间: 2002年08月27日 15:45
Re: 关于分页显示的问题! 2004年09月10日 08:50 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
还是根据不同数据库用不同的分页SQL,这个我已经实现了,可以看我的程序,http://www.laoer.com
我的想法和Hibernate的方法基本是一致的。
banq

悄悄话
发表文章: 9312
注册时间: 2002年08月03日 17:08
Re: 关于分页显示的问题! 2004年09月10日 12:45 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>还是根据不同数据库用不同的分页SQL
我不赞成,这样丧失了J2EE基本原理:可移植性。现在是完全可以做出与具体数据库无关的分页显示框架,我的JdonSD是其中,我看到也有不少人写出来。
xuesenlin

悄悄话
发表文章: 29
注册时间: 2003年09月15日 16:53
Re: 关于分页显示的问题! 2004年10月16日 17:12 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
怎么我的帐号没了?
leema

悄悄话
发表文章: 24
注册时间: 2004年10月19日 17:10
Re: 关于分页显示的问题! 2004年10月28日 11:15 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
Hibernate的HQL写,安全省事又不失可移植性。
如:

select new City(city.id, city.name, province)
from com.meetingnet.model.City as city
left join city.province province
order by province.id, city

可直接获得List,而不需要一条一条读出来再Set。
dabb

悄悄话
发表文章: 233
注册时间: 2004年04月21日 15:02
Re: 关于分页显示的问题! 2004年10月29日 10:58 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
bang,能说说你实现的原理吗?我想不出有哪种方法可以是完全通用的,无非是在数据库之前在加一个针对各种数据库的解析层,
就象用hsql这种东西也是有可能碰到Hibernate不支持的数据库(当然大多数主流数据库是可以的)。翻页的实现方式看需求,一般都用你说的第二种方法。还有就是折中的方法,就是一次取几页的数据,就象lucene的实现思想一样,如果取前100条的记录能够满足百份之80-90%的需求,那这样做就可以减少对数据库的访问请求。
ahu0707

悄悄话
发表文章: 3
注册时间: 2004年10月28日 14:22
Re: 关于分页显示的问题! 2004年10月29日 15:03 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
赞成楼上的观点,相对而言,满足大多数,而且也不会浪费太多的资源、兼顾了速度,中国特色嘛!一些特殊的客户有特殊的需求很正常,这样就要削足适履,特殊对待。^_^^_^^_^^_^
anonymous

悄悄话
发表文章: 0
注册时间:
Re: 关于分页显示的问题! 2004年11月18日 10:40 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
dao前架个接口。我是采用IOC形式,来实现的。
Juniper

悄悄话
发表文章: 29
注册时间: 2004年07月13日 12:02
Re: 关于分页显示的问题! 2004年11月18日 13:52 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
楼主的第一种方式(即:返回可滚动的ResultSet)比较适合小数据量的分页查询---
而对于大数据量的查询,我一般就使用第二种方式。

Hibernate分页时很方便,会直接返回给你一个List.你直接枚举即可。如果你看过Hibernate分页的源码就会发现:
Hibernate会优先尝试使用"sql语句分页",如果遇上了一种不被支持的DB,就会使用jdbc游标。

有时,所谓的“可移植性”并不是象一些人说得那么important..这就好比:我明明知道我的飞机不会改期,我为什么还要去买一张可以改期的飞机票?我没有见过有多少客户选定了解决方案以后还要求更换数据库的,起码在运行期间的几年之内不会(只 数据转移/备份 就是一项十分痛苦的工作)。

如果非要强调“可移植性”,那么"sql语句分页"的每种不同的DB有不同的实现,你可以把这一层单独包装起来,专门针对不同的DB返回不同的SQL查询语句-----或许你感觉这些工作比较枯燥,那你可以试试Hibernate,它已经帮你搞定了一大半。
这个主题有 12 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam