您的位置:首页 > 其它

几种分页方式分析.

2008-07-07 14:15 239 查看
一.逻辑分页

1.逻辑分页的第一种方式,利用ResultSet的滚动分页。步骤如下:

a.根据条件sql查询数据库。

b.得到ResultSet的结果集,由于ResultSet带有游标,因此可以使用其next()方法来指向下一条记录。

c.利用next()方法,得到分页所需的结果集。

这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”。

代码如下:

package com.cosmow.pageresultset.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.cosmow.pageresultset.entity.Bars;

2.逻辑分页的第二种方式

利用Scrollable ResultSets(可滚动结果集合)来快速定位到某个游标所指定的记录行,所使用的是ResultSet的absolute()方法。

改进代码如下:

package com.cosmow.pageresultset.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.cosmow.pageresultset.entity.Bars;

虽然和第一种方式区别不大,单效率比ResultSet滚动要好,但是absolute()方法并不是所有jdbc驱动都支持。

可用如下代码测试当前jdbc驱动是否支持可滚动结果集:

int type = rs.getType();

if (type == ResultSet.TYPE_SCROLL_INSENSITIVE || type == ResultSet.TYPE_SCROLL_SENSITIVE)

System.out.println("Result set is scrollable");

else

System.out.println("Result set is not scrollable");

二.物理分页

利用数据库本身的一些特性来分页。即:利用了数据库对sql语法的优化,提高分页性能。

1.针对Oracle数据库

步骤如下:

a.根据所使用的数据库特性来组织sql进行分页。

b.每次跳转页面的sql查询都不相同。

通用的sql分页方式,“限制行数结果集的倒序”分页,步骤如下:

(1).取得符合条件的所有结果集中可以唯一标识的Key值(通常是主键),并正向排序。

(2).利用数据库提供的特殊方法进行“最大结果集”的限制(在Oracle中使用rownum, sql server中使用top, mysql中使用limit...),

该“最大结果集”指包含当前所处页的所有记录数,“最大结果集”应该只包含惟一的Key值。

(3).对步骤(2)中的“最大结果集”进行逆序,并取得“显示当前页显示数量的结果集”,该结果集中只包含惟一的Key值。

(4).通过步骤(3)中所取得的Key值取得显示数据,该显示数据就是当前页应该显示的数据。

代码如下:

package com.cosmow.pageresultset.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.cosmow.pageresultset.entity.Bars;

2.针对MySQL数据库

在MySQL数据库中offset关键字的意思是"越过",而limit关键字的意思是“限制”,利用这两者结合可轻松分页。

(1)取得符合条件的结果集,包含全字段。

(2)利用offset关键字越过一段结果集(被越过的结果集就是"(当前页 - 1) * 一页显示数")。

(3)利用limit关键字限制取得一段结果集(被限制取得的结果集就是一页显示数)

代码如下:

package com.cosmow.pageresultset.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.cosmow.pageresultset.entity.Bars;

分页结论:

1.物理分页速度上并不一定快于逻辑分页,逻辑分页速度上也并不一定快于物理分页。

2.物理分页总是优于逻辑分页:没有必要将属于数据库端的压力加诸到应用端来,就算速度上存在优势,

然而其它性能上的优点足以弥补这个缺点。

3.在分页工作前,有必要了解使用数据库本身的一些sql语句特点更好的分页。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: