求教分页查询的问题。
我最近对分页查询,具体怎么运用产生了兴趣并遇到了困惑,希望大神帮忙点拨一下。
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;
}
......
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条记录好呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
sql分页才是真正的物理数据库层面的分页。你所说的结果及再分页算是逻辑上的分页。
分页主要是为了解决查询结果集太多造成的IO瓶颈,影响数据库查询效率的问题。
没用过db2
参考一下hibernate的分页查询语句组装代码就可以知道了
hibernate分页好简单
明天给你个高大上的sql分页查询语句
回复
DB2
这样的sql语句不就可以分页了吗
回复
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分啊