诡异的分页代码失效问题

前言: 之前碰到了一个界面上分页失效的问题,并为之困扰了数日,后台定位为排序失效的问题,问题就迎刃而解了...

问题描述:

在界面上的某个分页功能存在失效的问题,第一页、第二页和最后一页的分页效果正常,但是中间的分页数据不变。 QA提了一个关于此的Bug.

问题分析:

1.  分析界面分页代码

界面分页的代码属于在项目使用较多的组件,关于失效分页部分的代码无特殊的定制和使用。

2.  前端和后台端交互的分析

基于HTTP的监控工具,发现分页请求的请求数据一切正常,分页的start/limit数据正确,过滤条件是正确的,排除前端问题。

3.   后台的代码分析

后台的代码是基于Hibernate实现的DAO查询分析,代码基于基类的常规查询,无特殊代码存在。而且这些基类的常规查询被项目中不同的模块所使用,其他模块功能正常。

故对这些查询的代码是否存在问题,持怀疑态度。

4.  怀疑生成的SQL是否存在问题

打印出在查询中使用的SQL语句,经过分析,SQL也不存在问题。其中使用了log4jdbc来监控sql执行。

5.  基于查询中使用的SQL在Oracle的plsql中直接运行SQL

结果发现,在50~75, 75-~100等区间,的确查询数据不变。 SQL语句:

 select *
          from (select row_.*, rownum rownum_
            from (select this_.id          as id25_0_,
                         this_.create_time as create2_25_0_,
                         this_.creator     as creator25_0_,
                         this_.modify_time as modify4_25_0_,
                         this_.updater     as updater25_0_,
                         this_.version     as version25_0_,
                         this_.bank_id     as bank7_25_0_,
                         this_.bank_name   as bank8_25_0_,
                         this_.chk_comment as chk9_25_0_,
                         this_.chk_status  as chk10_25_0_,
                         this_.cup_bank_id as cup11_25_0_,
                         this_.del_status  as del12_25_0_,
                         this_.smp_name    as smp13_25_0_,
                         this_.status      as status25_0_
                    from ns_para_bank this_
                   where this_.chk_status = '02'
                     and this_.chk_status = '02'
                     and this_.del_status = '01'
                   order by this_.modify_time desc
                   ) row_
           where rownum <= 100)
         where rownum_ > 75

6.   后怀疑是排序字段modifyTime问题

经过排查,发现大部分的modifiedTime字段的数据为空,故导致了排序失效;由于排序失效,引发了分页数据不变的问题

问题的解决

为排序条件新增了一个排序字段, 在modified_time失效的情况下,保证整体排序的有效性,即可解决分页失效问题。

附录

1.  Oralce之rownum的使用方法  http://blog.csdn.net/lcj8/article/details/4720032

时间: 2024-10-13 16:03:37

诡异的分页代码失效问题的相关文章

javascript实现的分页代码实例

javascript实现的分页代码实例: 下面是一段javascript实现的分页代码,当然必须要结合后台代码实现.大家可以自行分析一下代码,希望能够给大家带来一定的帮助,代码如下: <script type="text/javascript"> function setPage(opt) { if(!opt.pageDivId || opt.allPageNum < opt.curpageNum || opt.allPageNum < opt.showPage

无刷新分页代码,jQuery分页完整示例

<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>jQuery分页演示效果</title><script type="text/javascript" src="/ajaxjs/jquery1.3.2.js">&l

php分页函数示例代码,php分页代码实现方法

php分页函数示例代码 分享一例php分页函数代码,用此函数实现分页代码很不错. 代码,php分页函数. <?php /* * Created on 2011-07-28 * Author : LKK , http://lianq.net * 使用方法: require_once('mypage.php'); $result=mysql_query("select * from mytable", $myconn); $total=mysql_num_rows($result);

转载:分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特

内容页分页代码

在使用Thinkphp开发的内容管理系统里面,很多东西都要自己开发,内容分页当然也是要自己开发的,下面是我根据查资料自己整理的方法: 1.首先是在后台编辑内容的时候需要插入分页符,不同的编辑器分页符自然也不同了 2.然后就是读取文章内容的时候,要根据分页符来把内容分割成多个数组然,这里需要传值当前是第几页,根据页数来读取分割后的数组 代码如下: <php>     $arr_con=explode('_ueditor_page_break_tag_',$dy['art_content']);/

PHP分页初探 一个最简单的PHP分页代码实现

PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核心就是围绕这条语句展开的,SQL语句说明:查询goods数据表从第2条数据开始取出7条数据.在分页代码中,7表示每页显示多少条内容,2通过公式计算表示翻页数,通过传入不同参数替换“2”的值,即可筛选出不同的数据. index.php: include 'conn.php'; //引入数据库操作类 $

php 简易分页代码

使用php制作了一个博客之后,对于分页代码着实让我这个零基础的人费了一番老劲,终于研究了一天一夜之后,勉强写了一段简易代码,勉强可以使用.此为第一个版本,未来会更新到用类的方式进行分页.加油~ <?php  //设定每页显示的文章数 $pagesize=5; //确定页数P的参数 @$p=$_GET['p']?$_GET['p']:1; //数据指针 $offset = ($p-1)*$pagesize; //查询本页显示的数据   $query = "select * from `art

自定义调用 ecshop 分页代码(转)

自定义调用 ecshop 分页代码 原文出处:http://blog.sina.com.cn/s/blog_6479ae370100hsq6.html function get_comments($num,$start){     $sql =" SELECT * FROM ecs_comment WHERE status = 1 AND parent_id = 0 and comment_type=0 ORDER BY add_time DESC  limit $start, $num&quo

分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特