定义四个分页变量

1
2
3
4
int pageNow     //表示第几页   该变量由用户决定
int pageSize //表示每一页显示几条记录 由程序指定(也可由用户定制)
int pageCont //表示共有多少页 该变量是计算出来的
int rowCont //表示共有多少条记录 该变量是查询数据库得到

分页算法.确定 rowCont 的值

1
2
3
4
pst = con.prepareStatement("select count(*) form users");
rst = pst.executeQuery();
rst.next();
rowCont = rst.getInt(1);

分页算法.确定 pageCont 的值

  • 二逼青年算法
1
2
3
4
5
if (rowCont % pageSize == 0) {
pageCont = rowCont / pageSize;
} else {
pageCont = rowCont / pageSize + 1;
}
  • 普通青年算法(等价与上面那个算法)
1
pageCont = rowCont % pageSize == 0 ? rowCont / pageSize : rowCont / pageSize + 1;
  • 文艺青年算法
1
pageCont = (rowCont - 1)/pageSize + 1;

分页算法.SQLServer 数据库查询

  • 利用 Not In 和 SELECT TOP 分页
1
2
3
4
5
6
7
SELECT TOP pageSize *
FROM table1
WHERE id NOT IN
(
SELECT TOP (pageSize*(pageNow-1)) id FROM table1 ORDER BY id
)
ORDER BY id
  • 利用 ID 大于多少和 SELECT TOP 分页
1
2
3
4
5
6
7
8
9
10
11
SELECT TOP pageSize *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP (pageSize*(pageNow-1)) id FROM table1 ORDER BY id
) A
)
ORDER BY id
  • 经测试这个效率较高
1
2
3
4
5
6
SELECT TOP pageSize*
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > pageSize*(pageNow-1)