我最近对分页查询,具体怎么运用产生了兴趣并遇到了困惑,希望大神帮忙点拨一下。
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条记录好呢?
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瓶颈,影响数据库查询效率的问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。