重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
两种实现
为张店等地区用户提供了全套网页设计制作服务,及张店网站建设行业解决方案。主营业务为成都做网站、成都网站建设、张店网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
1, 所有数据全部存到session里。。每次点击数字时从session取。。假设数字时N。。
则取(N-1)*5 ~ N*5
2 在后台的SQL语句中作处理。。select * from xxx limit 0,5。。这是第一页取出5条数据。。以此类推。。select * from xxx limit 5,5是第二页取出5条。。。select * from xxx limit 10,5第三页取5条。。
真分页:每次从数据库里按照排序方法,取一段数据,比如每页20条,第一页就是1-20 ,第二页就是21-40。它是每次都从数据库里查询。都是最新的。假分页:一次从数据库里得到很多页的数据,然后缓存起来。比如每页20条,一次取了100条,缓存起来。第一页依然是1-20 ,第二页就是21-40。到第6页的时候,再从数据库里取101-200条,在缓存起来。只不过,取数据的时候不是从数据库里取了,而是在缓存里取。但是这个数据有可能不是最新的,因为不是直接从数据库里查询的。这种多用在更新不多的数据上。
实现原理很简单,就是建立一个Page类,里面放当前访问的页数和每一页显示的记录行数。然后通过分页计算就可以得出下列数据。
总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1。
当前页数。
表记录的起始位置=(当前页数-1)*每页大小。
总记录数(select count(*) from [表名] [where [条件]]。从数据库中查询得到)
每页大小,可以固定,也可以从页面传过来有了这几个参数之后,就用sql语句查出对应的记录就可以了。
package common.util;
import java.util.*;
public class PageController implements IPageModel {
private Collection model;
//数据总行数
private int totalRowCount = 0; //
//总页数
private int pageCount = 0;
//每页应显示的行数
private int maxPageRowCount = 0;
//当前页行数
private int currPageRowCount = 0;
//当前页号
private int currPageNum;
//默认构造
public PageController() {
super();
}
//传入模型
public PageController(Collection model) {
setPageController(model);
}
//设一个分页模型
public void setPageController(Collection model) {
this.model = model;
this.totalRowCount = model.size();
}
/**
* 总页数
* @return int
*/
public int getPageCount() {
return this.pageCount;
}
/**
* getPageContents
*
* @param intPageNum int
* @return Object
*/
public Object getPageContents(int intPageNum) {
//非法数据
if(intPageNum1){
intPageNum=1;
}
if(intPageNumpageCount){
intPageNum=pageCount;
}
//指定当前页
this.currPageNum=intPageNum;
int i = 0;
ArrayList arr = new ArrayList();
//如果是合法的范围
if (intPageNum 0 intPageNum = pageCount) {
//计算该页的开始号和结束号
int lfromrow = (intPageNum - 1) * maxPageRowCount;
arr = (ArrayList) getElementsAt(model, lfromrow, lfromrow + maxPageRowCount-1);
}
currPageNum=intPageNum;
return arr;
}
public Object getLastPage() {
return this.getPageContents(pageCount);
}
public Object getFirstPage() {
return this.getPageContents(0);
}
/**
* getCurrentPageRowsCount
*
* @return int
*/
public int getCurrentPageRowsCount() {
if(currPageNumpageCount){
return maxPageRowCount;
}
else{//最后一页
return totalRowCount-(pageCount-1)*maxPageRowCount;
}
}
public int getCurrentPageNum(){
return currPageNum;
}
/**
* setMaxPageRows
*
* @return int
*/
public void setMaxPageRows(int rowCount) {
maxPageRowCount = rowCount;
//计算总页数
if (totalRowCount % maxPageRowCount 0) { //有余数
pageCount = totalRowCount / maxPageRowCount + 1;
}
else {
pageCount = totalRowCount / maxPageRowCount;
}
}
/**
* getMaxPageRows
*/
public int getMaxPageRows() {
return maxPageRowCount;
}
//私有方法,返回集合中指定范围的数据
private Object getElementsAt(Collection model, int fromIndex, int toIndex) {
Iterator iter = model.iterator();
ArrayList arr = new ArrayList();
if (iter != null) {
int i = 0;
while (iter.hasNext()) {
Object obj=iter.next();
if (i = fromIndex i = toIndex) {
arr.add(obj);
}
if (i toIndex) {
break;
}
i = i + 1;
}
}
return arr;
}
}
下面的代码是纯jsp页面分页
也有java后台代码的分页,你如果想要的话就说。
%@ page contentType="text/html; charset=gb2312" %
%@ page language="java" %
%@ page import="java.sql.*" %
%
//驱动程序名,比较旧了,如果你用mysql5,自己改。
String driverName="org.gjt.mm.mysql.Driver";
String userName="root";//数据库用户名
String userPasswd="";//密码
String dbName="bookstore";//数据库名
String tableName="items"; //表名
//连接字符串
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"password="+userPasswd;
Class.forName(driverName).newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
//每页显示记录数
int PageSize = 8;
int StartRow = 0; //开始显示记录的编号
int PageNo=0;//需要显示的页数
int CounterStart=0;//每页页码的初始值
int CounterEnd=0;//显示页码的最大值
int RecordCount=0;//总记录数;
int MaxPage=0;//总页数
int PrevStart=0;//前一页
int NextPage=0;//下一页
int LastRec=0;
int LastStartRecord=0;//最后一页开始显示记录的编号
//获取需要显示的页数,由用户提交
if(request.getParameter("PageNo")==null){ //如果为空,则表示第1页
if(StartRow == 0){
PageNo = StartRow + 1; //设定为1
}
}else{
PageNo = Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数
StartRow = (PageNo - 1) * PageSize; //获得开始显示的记录编号
}
//设置显示页码的初始值
if(PageNo % PageSize == 0){
CounterStart = PageNo - (PageSize - 1);
}else{
CounterStart = PageNo - (PageNo % PageSize) + 1;
}
CounterEnd = CounterStart + (PageSize - 1);
%
html
head
title分页显示记录/title
link rel="stylesheet" href="style.css" type="text/css"
/head
%
//获取总记录数
ResultSet rs = statement.executeQuery("select count(*) from items" );
rs.next();
RecordCount = rs.getInt(1);
rs = statement.executeQuery("SELECT image_url,author,price,item_id FROM items ORDER BY item_id DESC LIMIT "
+StartRow+", "+PageSize);
//获取总页数
MaxPage = RecordCount % PageSize;
if(RecordCount % PageSize == 0){
MaxPage = RecordCount / PageSize;
}else{
MaxPage = RecordCount/PageSize+1;
}
%
body class="UsePageBg"
table width="100%" border="0" class="InternalHeader"
tr
td width="24%"font size=4分页显示记录/font/td
td width="76%"
font size=4%="总共"+RecordCount+"条记录 - 当前页:"+PageNo+"/"+MaxPage %/font
/td
/tr
/table
br
table width="100%" border="0" class="NormalTableTwo"
tr
td class="InternalHeader"记录序号/td
td class="InternalHeader" 图像路径/td
td class="InternalHeader" 作者/td
td class="InternalHeader" 价格/td
td class="InternalHeader" 图书编号/td
/tr
%
int i = 1;
while (rs.next()) {
int bil = i + (PageNo-1)*PageSize;
%
tr
td class="NormalFieldTwo" %=bil %/td
td class="NormalFieldTwo" %=rs.getString(1)%/td
td class="NormalFieldTwo" %=rs.getString(2)%/td
td class="NormalFieldTwo" %=rs.getString(3)%/td
td class="NormalFieldTwo" %=rs.getString(4)%/td
/tr
%
i++;
}%
/table
br
table width="100%" border="0" class="InternalHeader"
tr
tddiv align="center"
%
out.print("font size=4");
//显示第一页或者前一页的链接
//如果当前页不是第1页,则显示第一页和前一页的链接
if(PageNo != 1){
PrevStart = PageNo - 1;
out.print("a href=TestPage.jsp?PageNo=1第一页 /a: ");
out.print("a href=TestPage.jsp?PageNo="+PrevStart+"前一页/a");
}
out.print("[");
//打印需要显示的页码
for(int c=CounterStart;c=CounterEnd;c++){
if(c MaxPage){
if(c == PageNo){
if(c %PageSize == 0){
out.print(c);
}else{
out.print(c+" ,");
}
}else if(c % PageSize == 0){
out.print("a href=TestPage.jsp?PageNo="+c+""+c+"/a");
}else{
out.print("a href=TestPage.jsp?PageNo="+c+""+c+"/a ,");
}
}else{
if(PageNo == MaxPage){
out.print(c);
break;
}else{
out.print("a href=TestPage.jsp?PageNo="+c+""+c+"/a");
break;
}
}
}
out.print("]");;
if(PageNo MaxPage){ //如果当前页不是最后一页,则显示下一页链接
NextPage = PageNo + 1;
out.print("a href=TestPage.jsp?PageNo="+NextPage+"下一页/a");
}
//同时如果当前页不是最后一页,要显示最后一页的链接
if(PageNo MaxPage){
LastRec = RecordCount % PageSize;
if(LastRec == 0){
LastStartRecord = RecordCount - PageSize;
}
else{
LastStartRecord = RecordCount - LastRec;
}
out.print(":");
out.print("a href=TestPage.jsp?PageNo="+MaxPage+"最后一页/a");
}
out.print("/font");
%
/div
/td
/tr
/table
%
rs.close();
statement.close();
connection.close();
%
/body
/html
//============分页功能===============
int pageSize=3; //一页显示几条记录
int pageNow=1; //希望显示第几条记录
//动态的接收pageNow
String sPageNow=req.getParameter("pageNowok");
if(sPageNow!=null){
pageNow=Integer.parseInt(sPageNow);
}
//调用UserBeanC1
UserBeanC1 ubc = new UserBeanC1();
ArrayList al =ubc.getResultByPage(pageNow,pageSize);
pw.println("table border=2");
pw.println("trthid/ththname/ththpasswd/ththmail/ththgrade/thth修改用户/thth删除用户/th/tr");
for(int i=0;ial.size();i++){
UserBean ub = (UserBean)al.get(i);
pw.println("tr");
pw.println("td"+ub.getUserId()+"/td");
pw.println("td"+ub.getUserName()+"/td");
pw.println("td"+ub.getPasswd()+"/td");
pw.println("td"+ub.getMail()+"/td");
pw.println("td"+ub.getGrade()+"/td");
pw.println("tda href=??修改/a/td");
pw.println("tda href=delUserC1?userId="+ub.getUserId()+" onclick=\"return window.confirm('确认删除吗')\"删除/a/td");
pw.println("/tr");
}
pw.println("/table");
//上一页
if(pageNow!=1){
pw.println("a href=wel?pageNowok="+(pageNow-1)+"上一页/a");
}
//显示超链接
for(int i=pageNow;i=pageNow+pageSize+1;i++){
pw.println("a href=wel?pageNowok="+i+""+i+"/a");
}
int pageCount=ubc.getPageCount();
//下一页
if(pageNow!=pageCount-4){
pw.println("a href=wel?pageNowok="+(pageNow+1)+"下一页/abr");
}
pw.println("br该网页被访问了"+this.getServletContext().getAttribute("visitTimes").toString()+"次br");
pw.println("您的IP地址是:"+req.getRemoteAddr()+"br");
pw.println("您的机器名是:"+req.getRemoteHost()+"br");
pw.println("/centerhrimg src=imgs/1.gifbr");
pw.println("/body");