分页显示在开发中是很常用的,而且也有很多种分页方式。分页过程中一般都是需要查询信息列表以及中的记录数,其中总记录数用来判断一共有多少页,这就需要两次查询(其实,如果查询条件不变的话,能不能变成一次查询?),大家都是如何处理这个问题呢,如何尽可能的提高效率呢?

解决方案 »

  1.   

    不同的数据库支持不同取子集的SQL关键字。像offset, limit...
    如果用hibernate,它自己会根据不同的dialect来翻译成数据库的SQL子集语句。
    query.setFirstResult(n);
    query.setMaxResults(m);  
    List l = query.list();
      

  2.   

    Hibernate分页查询原理解读
      

  3.   

    ..呵呵  
    我用的别人写的jar包
    自己只需要写个查找总条数的方法没写过分页了 
      

  4.   

    主要看你查询的数据变化的几率,如果实时变化,那当然:需要查询信息列表以及中的记录数;
    反正查询一次即可。
    再者如果当前查询的数据量不是很多,2k条内,可以考虑一次查询完,把数据(做成xml)都放到客户端,翻页的操作时,直接用js去客户端的数据。
      

  5.   

    一般都jdbc调用存储过程使用数据库分页实现。查两次是没办法的。
      

  6.   

      业界成熟组件displatag~~
      

  7.   

    displaytag
      

  8.   

    同意 6楼。当数据量不大时,取数据到客户端,这样很好。当数据很量大时,查询两次则是必须的,另,各种不同数据库对于分页都有不同处理方式,如Oracle的伪列、MSSQLSERVER的TOP、MySQL的LIMIT关键字等等。当查询一次后,之后的查询就会很
      

  9.   

    a代表每页显示的行数、b代表第几页、
    select top a * from tabl_name where id not in(select top (b-1)*a id from tabl_name)
    这样就可以了
      

  10.   

     语句谁都会可是效率呢?请问你这个兼容数据库吗?肯定不是啦。
       又要求效率和兼容性可以后台可以采用Hibernate(其他没有过)。前台使用displaytag就OK了
      

  11.   

    一次请求
    在后台查询两次(一次差记录数,一次查记录集)
    将查询记录个数相关放在一个分页类
    将记录集放在List里
    然后分页类和查询的记录集放在一个map里边返回给前台
    一次返回
    前台怎么解析?
    交给JSTL好了
    很强大的
    O(∩_∩)O~
      

  12.   

    分页,可以分为
    1  假分页(低效)
        
    一次性从数据库读取表中的所有记录数,然后页面通过取rs结果集的记录数 再进行分页显示2  真分页(高效)利用SQL在数据库端,就进行好分页。例如:oracle SELECT * FROM 
    (
    SELECT A.*, ROWNUM RN 
    FROM (SELECT * FROM TABLE_NAME) A 
    WHERE ROWNUM <= 40
    )
    WHERE RN >= 21使用rownum
    进行分页mysql 有limitdb2 有rownumber()等等
      

  13.   

    那要看看显示的分页样式是怎么样的“上一页  下一页”这种样子的话,不需要查两次,只需要查一次 SQL 就行了“首页 上一页 1 2 3 4 5 下一页 末页”这种样子的话,只能查两次了
      

  14.   

    的确需要两次查询,这是必需的,先查询出总记录数,然后才能计算出此次查询应该查询第几条至第几条,
    这个计算就跟数据库没啥关系了。
    计算完后去数据库查询,不同的数据库有不同的算法,如oracle-rownum,sqlserver-top,mysql-limit,所谓的效率,也就只能在这一步上面下功夫了,这要根据你用什么数据库来定,不可一概而论。
      

  15.   

    给我也搞个JAR包! 呵呵!
      

  16.   

    不同的数据库支持不同取子集的SQL关键字。像offset, limit... 
    如果用hibernate,它自己会根据不同的dialect来翻译成数据库的SQL子集语句。 
    query.setFirstResult(n); 
    query.setMaxResults(m);  
    List l = query.list();