(假定你的页数从1开始)
1、总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1
2、当前页数(从浏览器传递的参数中获得)
3、表记录的起始位置=(当前页数-1)*每页大小
4、总记录数(select count(*) from [表名] [where [条件]],从数据库中查询得到)
5、每页大小,可以固定,也可以从页面传过来
有了这几个参数之后,就用sql语句查出对应的记录就可以了。
mysql数据库用limit 表记录的起始位置,每页大小 语句添加到你的查询语句最后面
sqlserver数据库用top语句和not in 来做
oracle数据库用rownum来做
再给你一段分页对象代码,你自己先读一下
<pre t="code" l="java">public class Page {
private long totalCount = 0// 总记录数
private int pageNumber = 1// 当前页号,默认显示第一页
private int pageSize = 20// 每页大小,默认每页20条
private int totalPage = 0// 总页数,默认为0
private int startRow = 0// 起始记录行号,默认为从表头开始
/**
* 分页计算方法,由setTotalCount调用
*/
public void pagination() {
// 计算总页数
if (this.totalCount % pageSize == 0)
this.totalPage = new Long(this.totalCount / pageSize).intValue()
else
this.totalPage = new Long(this.totalCount / pageSize).intValue() + 1
// 排除错误页号
if (this.pageNumber <1)
this.pageNumber = 1
if (this.pageNumber >this.totalPage)
this.pageNumber = this.totalPage
// 计算起始行号
this.startRow = (this.pageNumber - 1) * this.pageSize
}
public long getTotalCount() {
return totalCount
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount
this.pagination()
}
public int getPageNumber() {
return pageNumber
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber
}
public int getPageSize() {
return pageSize
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize
}
public int getTotalPage() {
return totalPage
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage
}
public int getStartRow() {
return startRow
}
public void setStartRow(int startRow) {
this.startRow = startRow
}
}
方法太多了.如果是jdbc的话
分两方面:1数据库分页
2代码分页
如果是框架持久层的话
一般持久层的查询对象都要相关方法设置
比如设置一次取多少
从那条记录开始取
还可以去引入一些外部分页的jar包
----------------------------------------------
总体思想是这样的:
首先肯定需要几个参数:请求的页数,一页显示多少条数据.数据库真实的条数.
首先查出所有数据放入一个集合里面,当然如果数据更新次数少竟然用缓存.
然后根据数据库总条数与每页显示条数得到真正的页数.
根据一页条数和请求的页可以得到一个查询的范围。
在这个范围内,把数据从刚才那个集合里取出放入一个新的集合.前台要显示的就是这个集合的数据.
至于导航,自然就是页数的加减了.
具体代码,有兴趣发邮件我,我可以给你几个例子的做法[email protected]
面试问题就比较好回答了:我认为可以概括为两种:
第一种:真分页,也就是数据库分页,需要多少数据取多少数据,适合数据量比较大的情况下使用.
第二种:假分页,把所有数据都取出来,然后在页面上进行分页.
大致就是这样子,当然这只是粗浅的说法.