Posted on 2009-09-11 10:57
java-flying 阅读(1015)
评论(0) 编辑 收藏
以Oracle 数据库为例:
1.利用游标分页
1
public void run()
{
2
// 总记录数
3
Integer total = getTotalCount();
4
// 查询最大行数
5
Integer maxCount = 10000;
6
// 总页数
7
Integer totalPage = (total - 1) / maxCount + 1;
8
// 开始行号
9
Integer startNo = 1;
10
String sql = "select m.id from mn00_tbl_music m";
11
Connection conn = null;
12
PreparedStatement stat = null;
13
ResultSet rs = null;
14
try
{
15
conn = dataSource.getConnection();
16
// conn.prepareStatement(sql,游标类型,能否更新记录);
17
// 游标类型:
18
// ResultSet.TYPE_FORWORD_ONLY:只进游标
19
// ResultSet.TYPE_SCROLL_INSENSITIVE:可滚动。但是不受其他用户对数据库更改的影响。
20
// ResultSet.TYPE_SCROLL_SENSITIVE:可滚动。当其他用户更改数据库时这个记录也会改变。
21
// 能否更新记录:
22
// ResultSet.CONCUR_READ_ONLY,只读
23
// ResultSet.CONCUR_UPDATABLE,可更新
24
stat = conn.prepareStatement(sql,
25
ResultSet.TYPE_SCROLL_INSENSITIVE,
26
ResultSet.CONCUR_READ_ONLY);
27
rs = stat.executeQuery();
28
29
for (int i = 1; i <= totalPage; i++)
{
30
// 将游标移动到指定行
31
//Calling absolute(1) is the same as calling first(). Calling absolute(-1) is the same as calling last().
32
//rs.first()相当于rs.absolute(1)
33
rs.absolute(startNo);
34
// 直接得出该行记录
35
Integer musicId = rs.getInt("id");
36
logger.info(startNo + "-" + musicId + "~~~~~~~~~`~~" + maxCount
37
+ "==");
38
startNo += maxCount;
39
}
40
} catch (SQLException e)
{
41
logger.error("数据库查询错误!" + e + "," + sql);
42
} finally
{
43
DaoUtil.close(conn, stat, rs);
44
}
45
}
2.利用SQL语句分页
1
从数据库表中第M条记录开始检索N条记录
2
3
SELECT *
4
5
FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
6
7
where t2.r >= M
8
9
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
10
11
SELECT *
12
13
FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
14
15
Where t2.R >= 10
Hibernate 分页