开发者社区> 问答> 正文

求教分页查询的问题。:报错

我最近对分页查询,具体怎么运用产生了兴趣并遇到了困惑,希望大神帮忙点拨一下。
public List queryForList(String id, Object paramObject, int skip, int max) throws SQLException
看参数skip和max是做分页查询用的 
譬如我要查询的内容有ID、HAPPENEDTIME、STATE,在一张表里,DB2数据库。
查询条件paramObject有起止时间startTime、endTime等要素。
(例如:SELECT a.ID,a.HAPPENEDTIME,a.STATE FROM LAW_DATA_ROW_INFO a WHERE a.HAPPENEDTIME <= TIMESTAMP('2014-10-31 00:00:00.0') and a.HAPPENEDTIME >= TIMESTAMP('2014-10-01 00:00:00.0'))
如果在这段时间内的记录有100多条,要查出第11条至15条。
我设置参数skip=11、max=5,从第11条数据开始取,取出5条数据。

这个查询过程具体是怎么样的?
小弟愚笨(暂时还写不出分页查询SQL ,还无法灵活运用)。
首先我猜想应该不可能全查出来,再取出第11条至25条 返回吧?
然后我想到可能是查出结果集, 取出第11条至25条?
com.ibatis.sqlmap.engine.execution.SqlExecutor.
private void handleResults(StatementScope statementScope, ResultSet rs, int skipResults, int maxResults, RowHandlerCallback callback)
        throws SQLException
    {
        ResultMap resultMap;
        int i;
        statementScope.setResultSet(rs);
        resultMap = statementScope.getResultMap();
        if(resultMap == null)
            break MISSING_BLOCK_LABEL_128;
        if(rs.getType() != 1003)
        {
            if(skipResults > 0)
                rs.absolute(skipResults);//我看到这一句,有点明白了:移动结果集的记录指针到第skipResults行
            break MISSING_BLOCK_LABEL_73;
        }


......


那分页查询是直接SQL分页,还是用ResultSet接口的absolute移动指针到第N条记录好呢?


展开
收起
kun坤 2020-06-14 10:21:56 522 0
1 条回答
写回答
取消 提交回答
  • SQL分啊######回复 @蜀山客 : 客气了,共同学习######回复 @CrazyHarry : 谢谢哥!我看明白了。######回复 @蜀山客 : select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage######这样的sql语句不就可以分页了吗######回复 @CrazyHarry : DB2######明天给你个高大上的sql分页查询语句######hibernate分页好简单######参考一下hibernate的分页查询语句组装代码就可以知道了######没用过db2######

    sql分页才是真正的物理数据库层面的分页。你所说的结果及再分页算是逻辑上的分页。

    分页主要是为了解决查询结果集太多造成的IO瓶颈,影响数据库查询效率的问题。

    2020-06-14 10:22:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载