1. 使用forward-only的resultset,rs.next()移动记录集就可以了
选从50-100行
int CurrentRow = 1;
int MinRow = 50;
int MaxRow = 100;
while(rs.next())
{
if (CurrentRow
{
CurrentRow++;
continue;
}
}
2.使用可滚动记录集的游标进行分页,用abslout(int row)定位
Connection cn = 。。。;
stmt = cn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
这样就可以使用rs.absolute(pos)进行定位了
3.使用SQL语句-通用
sql20000语句:
select top 50 *
from (select top 100 * from tablex order by id desc) as a
order by id
Oracle的语句:
select * from (select rownum r ,* from test) tt
where tt.r > 50 and tt.r <= 100;
DB2中:
select * from payment fetch first 5 row only --查前5条记录
mysql:
select * from table limit startRow,endRow
4.使用ibatis,hibernate等,分页已经内部实现了,设置一下就可以了
1)hibernate
Query q = session.createQuery("from Cat as c");
q.setFirstResult(50);
q.setMaxResults(100);
List l = q.list();
那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在net.sf.hibernate.loader.Loader这个类里面,仔细阅读该类代码,就可以把问题彻底搞清楚。
Hibernate2.0.3的Loader源代码第480行以下:
if (useLimit) sql = dialect.getLimitString(sql);
PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable);
如果相应的数据库定义了限定查询记录的sql语句,那么直接使用特定数据库的sql语句。
然后来看net.sf.hibernate.dialect.MySQLDialect:
public boolean supportsLimit() {
return true;
}
public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append(sql);
pagingSelect.append(" limit ?, ?");
return pagingSelect.toString();
}
这是MySQL的专用分页语句,再来看net.sf.hibernate.dialect.Oracle9Dialect:
public boolean supportsLimit() {
return true;
}
public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
return pagingSelect.toString();
}
Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式,如果只是一层或者两层的查询语句 的rownum不能支持order by。
2)ibatis
PaginatedList list =sqlMap.queryForPaginatedList ("getProductList”, null, 10);
list.nextPage();
list.previousPage();
分享到:
相关推荐
java实现oracle分页策略完整版,可当做参考类使用,有详细注释,适合初学者。
Linux中每个进程都会有各自不同的页表,也就是说进程的映射函数互不相同,保证每个进程虚拟地址不会映射到相同的物理地址上。这是因为进程之间必须相互独立,各自的...本文将为大家介绍Linux操作系统中的分页的策略。
利用ASP.NET的缓存功能,结合性能良好的存储过程,一次性地缓存数据库数页数据,以供用户分页查询,是优化Web数据查询性能的比较理想的方式。文章详细介绍了优化模型的实现,并进行了性能分析
jdbc事务 及其实例 两种分页策略的对比
该方案通过分析传统分页查询技术的不足,融合了多种技术,包括数据库优化策略、SQL 语句优化、游标变量、批绑定、动态 SQL 等,以提高海量数据的分页查询效率。 database optimization 在 Oracle 10g 数据库中,...
3、分页功能:aop实现默认分页赋值。 4、统一结果返回。 5、策略工厂模式:用于不同业务逻辑的实现。 6、uid生成工具。 7、集成swagger在线接口文档。 8、文件上传功能。 9、excel文件解析功能:poi实现。 10、minio...
1.android tablehost 实现 类似qq 分组 消息,联系人,动态的分组策略 , 2.滑动手势 3.listview 分页 4.复用 navigation bar
2, 内存物理块数固定为15个,对多个作业采用可变分配全局置换的策略分配物理块 3, 作业数量与作业大小(10-20页)可在界面进行设置 4, 所有作业按RR算法进行调度,时间片长度为1秒 5, 可为每个作业随机产生引用...
用户分页策略 个人分页政策价值 个人分页政策 队伍 升级政策 路由键 预定的替代 轮换 网络挂钩 聊天 笔记 维护模式 变更记录 执照 安装 使用NPM: $ npm install victorops-api-client 使用纱线: $ yarn add ...
里面包括了特定场合下,HBase随机查询的一些性能指标参考以及调优策略
其中,由系统随机产生进程...物理块分配策略采取固定分配局部置换; 分配算法采用按比例分配算法; 调页采用请求调页方式; 置换分别采用FIFO、LRU 和简单CLOCK 算法; 驻留集大小可调,观察驻留集大小对缺页率的影响。
如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化。 接下来,让我们通过一个例子来看在MongoDB中翻阅数据的不同方式。在这个例子中,我们有一个CRM数据库的用户数据,我们...
aka-dbutils是一个轻量级的,强大的数据库访问工具类。aka-dbutils的设计的初衷就是为了使事情更简单,你只需要30分钟就可以完全掌握aka-dbutils的所有用法。...天然支持分页查询,多种分页策略可供选择。 针对复
通常针对MySQL大数据量的查询采取“分页”策略,但是如果翻页到比较靠后的位置时查询将变得很慢,因为mysql将花费大量的时间来扫描需要丢弃的数据。 基本分页技巧 通常情况下,为了实现高效分页,需要在查询中WHERE...
固定时间间隔内的检索使我们能够通过添加以下功能来优化成本和延迟:增加对CDN中过去时间间隔的所有密钥进行缓存的功能,并且还可以用作分页策略。 有关Apple / Google联系人跟踪协议的更多详细信息,请参见。 在...
1.android tablehost 实现 类似qq 分组 消息,联系人,动态的分组策略 , 2.滑动手势 3.listview 分页
代码中写了监测模块,实现了策略模式;方便的在各种分页间切换....;包含了很多分页代码;带百万条sql语句...
1) 实现请求分页存储管理方式的页面置换算法:近期最少使用算法(LFU) 2) 内存物理块数固定为15个,对多个作业采用可变分配全局置换的策略分配物理块 3) 作业数量与作业大小(10-20页)可在界面进行设置 4) 所有...
进程调度的主要功能是按照一定的策略选择一个处于就绪状态的进程,使其获得处理机执行。常见的进程调度算法有优先级调度算法、时间片轮转算法等。LFU算法是近期最少使用算法,它是一种页面置换算法,以便在内存中...