Java中实现分页效果的详细代码

Java中实现分页效果的详细代码,第1张

<head>
<%
const MaxPerPage=20
dim sql
dim rs
dim totalPut
dim CurrentPage
dim TotalPages
dim i,j
%>
</head>
<body>
<%
conn = "DBQ=" + servermappath("wj028mdb") + ";DefaultDir=;DRIVER={Microsoft Access Driver (mdb)};"
sql = "SELECT FROM USER order by id desc"
set rs=servercreateobject("adodbrecordset")
rsopen SQL,conn,1,1
rsMoveFirst
rspagesize=MaxPerPage
howmanyfields=rsFieldsCount-1
If trim(Request("Page"))<>"" then
CurrentPage= CLng(request("Page"))
If CurrentPage> rsPageCount then
CurrentPage = rsPageCount
End If
Else
CurrentPage= 1
End If
if rseof then
responsewrite "<p align='center'>没有记录!</p>"
else
totalPut=rsrecordcount
if CurrentPage<>1 then
if (currentPage-1)MaxPerPage<totalPut then
rsmove(currentPage-1)MaxPerPage
dim bookmark
bookmark=rsbookmark
end if
end if
dim n,k
if (totalPut mod MaxPerPage)=0 then
n= totalPut \ MaxPerPage
else
n= totalPut \ MaxPerPage + 1
end if%>
<% i=0
do while not rsEOF and i<maxperpage
%>
<%
rsmovenext
i=i+1
loop
%>
第<%=currentpage%>页
共<%=n%>页
<%
k=currentpage
if k<>1 then
responsewrite "[<b>"+"<a href='listasppage=1'>首页</a></b>]"
responsewrite "[<b>"+"<a href='listasppage="+cstr(k-1)+"'>上一页</a></b>]"
else
ResponseWrite "[首页][上一页]"
end if
if k<>n then
responsewrite "[<b>"+"<a href='listasppage="+cstr(k+1)+"'>下一页</a></b>] "
responsewrite "[<b>"+"<a href='listasppage="+cstr(n)+"'>尾页</a></b>] "
else
ResponseWrite "[下一页][尾页]"
end if
%>
<%
end if
set rs=nothing
set conn=nothing
%>
</body>

分页显示一般有两种实现方式:业务层分页数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来

分页最重要的是原理:
就是读取你所想要的数据,那最重要的就是sql语句的写法,如果是使用sqlserver数据库
分页的写法
select
top
10

from

where
id
not
in(select
top10
id
from
表)这里假定每页显示10条数据,这里读取的是第二页的数据,如果读取第三页的数据,子查询里面就变成
top
20
,总结为(页数-1)当前页面的条数,希望能对有帮助。

package dlwsxxbase;
public class Pager {
private int totalRows; // 总行数
private int pageSize; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行
private int pageStartRow; // 当前页开始行
private int pageEndRow; // 当前页结束行
private int hasNextPage; // 下一页存在标识[0:不存在,1:存在]
private int hasPreviousPage; // 前一页存在标识[0:不存在,1:存在]
public Pager() {
}

public Pager(int _totalRows,int _pageSize) {
pageSize = _pageSize;
totalRows = _totalRows;
totalPages = totalRows / pageSize;
int mod = totalRows % pageSize;
if (mod > 0) {
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getpageStartRow() {
return pageStartRow;
}
public int getpageEndRow() {
return pageEndRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public int getHasNextPage() {
return hasNextPage;
}
public int getHasPreviousPage() {
return hasPreviousPage;
}
public void setTotalRows(int totalRows) {
thistotalRows = totalRows;
}
public void setStartRow(int startRow) {
thisstartRow = startRow;
}
public void setPageStartRow(int pageStartRow) {
thispageStartRow = pageStartRow;
}
public void setPageEndRow(int pageEndRow) {
thispageEndRow = pageEndRow;
}
public void setTotalPages(int totalPages) {
thistotalPages = totalPages;
}
public void setCurrentPage(int currentPage) {
thiscurrentPage = currentPage;
}
public void setPageSize(int pageSize) {
thispageSize = pageSize;
}
public void setHasNextPage(int hasNextPage) {
thishasNextPage = hasNextPage;
}
public void setHasPreviousPage(int hasPreviousPage) {
thishasPreviousPage = hasPreviousPage;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1;
startRow = 0;
pageStartRow = startRow + 1;
thishasFlagSet(currentPage, totalPages);
if (thishasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRow + pageSize;
}
}
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) pageSize;
pageStartRow = startRow + 1;
thishasFlagSet(currentPage, totalPages);
if (thishasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRow + pageSize;
}
}
public void next() {
if (currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) pageSize;
pageStartRow = startRow + 1;
thishasFlagSet(currentPage, totalPages);
if (thishasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRow + pageSize;
}
}
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) pageSize;
pageStartRow = startRow + 1;
thishasFlagSet(currentPage, totalPages);
if (thishasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRow + pageSize;
}
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
}
thishasFlagSet(currentPage, totalPages);
}
private void hasFlagSet(int currentPage, int totalPages) {
if (currentPage == totalPages) {
if (currentPage == 1) {
thishasPreviousPage = 0;
thishasNextPage = 0;
} else {
thishasPreviousPage = 1;
thishasNextPage = 0;
}
} else {
if (currentPage == 1) {
thishasPreviousPage = 0;
thishasNextPage = 1;
} else {
thishasPreviousPage = 1;
thishasNextPage = 1;
}
}
}
}

这是我的工程里的分页核心代码,希望对你有用,还有ssh分页文档,可以参照研究一下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10356911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存