`
wsc830719
  • 浏览: 167290 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

SQLServer2000的分页办法

阅读更多

其实使用Java的话,一般是不会考虑使用sqlservler的数据库的,但是有时候还是会用到的,我年初的时候,做过办公室OA系统,说实话,系统做的很差劲,尤其财务管理那块,一直没好的解决办法。 另外数据库分页我就考虑了整整一天,

略微从网上找了些资料,但是有些不对,或者显示某些页面时出现问题,比如数据重复问题,尤其是点击最后一页时,出现问题更多。

       开始时,我读取最后一页和其他页分开写,但是总感觉麻烦,于是总结规律,发现还是能够一起写的。

下面是基本语句:

select * from (   select TOP 2 * FROM ( SELECT TOP 6 * from dbo.o1_progstate  ORDER BY pst_id ASC ) as t1 ORDER BY pst_id DESC ) as t1   ORDER BY pst_id ASC;

 

上面的2(绿色的)就是代表我从哪个记录开始取,而6(黄色的)就是代表分页大小。

不过需要到最后一页是判断,因为分页时一般会读取记录数,那么也就知道了总页数,因此,可以判断当前是否在读最后一页,如果是,就把绿色的考虑成:总记录数%页面大小 (取余数)就可以了。

变量pageNum 当前页码  pageSize 页面大小  recordCount总记录数 pageCount总页数

6处使用pageSize不用变化。

2处 如果不是最后页:(pageNum - 1)×pageSize

    if(pageNum == pageCount)的话 就取 recordCount%pageSize

自己使用下来,每个页面显示都很正常,没发现什么问题。

 

不过hibernate等映射框架下sqlserver2000,是假分页,这严重影响了程序性能,使用Java尤其映射框架时最好别用sqlserver2000,2005好像就支持真分页了。所谓的假分页就是,比如读第2000到2100的记录,但实际上是读了2100个记录然后在内存中在分离到了2000到2100个,这肯定影响性能的。

总之,微软的sqlserver数据库并发能力确实不高,自己在数据库方面很肤浅,但感觉着它没有MYSQL和oracle的性能好。这个感觉可能太主观,如遇高手,如果有时间的话,希望给初学者指点下。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics