昨天看到一篇《 纯jsp分页代码 》的文章,是用于mysql,稍微修改下,用于sqlserver2005/2008,没有异常处理。没有考虑性能等。 现将代码贴出,以供初学者参考: 注:邀月使用环境eclipse 3.4.2+tomcat 6.18+sqlserver2005 sp3调试成功。 页面pagelistdemo.js
昨天看到一篇《纯jsp分页代码》的文章,是用于mysql,稍微修改下,用于sqlserver2005/2008,没有异常处理。没有考虑性能等。
现将代码贴出,以供初学者参考:
注:邀月使用环境eclipse 3.4.2+tomcat 6.18+sqlserver2005 sp3调试成功。
页面pagelistdemo.jsp内容:
code
@ page language=java contenttype=text/html; charset=utf-8
pageencoding=utf-8%>
//连接字符串
string url = jdbc:sqlserver:// + globals.server
+ ;databasename= + globals.dbname;
class.forname(globals.drivername).newinstance();
connection connection = drivermanager.getconnection(url,
globals.username, globals.pwd);
statement statement = connection.createstatement();
//每页显示记录数
int pagesize = 10;
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; //获得开始显示的记录编号
}
//因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示
//一定数量的页面链接
//设置显示页码的初始值!!
if (pageno % pagesize == 0) {
counterstart = pageno - (pagesize - 1);
} else {
counterstart = pageno - (pageno % pagesize) + 1;
}
counterend = counterstart + (pagesize - 1);
%>
doctype html public -//w3c//dtd html 4.01 transitional//en http://www.w3.org/tr/html4/loose.dtd>
@page import=net.data.util.globals%>
@page import=java.sql.resultset%>
@page import=java.sql.drivermanager%>
@page import=java.sql.connection%>
@page import=java.sql.statement%>
element>
html>
head>
meta http-equiv=content-type content=text/html; charset=utf-8>
title>分页显示记录title>
link rel=stylesheet href=style.css type=text/css>
head>
//获取总记录数
resultset rs = statement
.executequery(select count(p_id) from product);
rs.next();
recordcount = rs.getint(1);
//取特定页数的数据
string strcolumn = p_id,p_name,loginid,modtime,p_singleintro ;
string strtable = product ;
string strsort = p_id desc ;
string pkid = p_id;
string strsql = ;
string strwhere = ;
string start_id = integer.tostring((pageno - 1) * pagesize + 1);
string end_id = integer.tostring(pageno * pagesize);
strsql = select + strcolumn
+ from (select row_number() over(order by + strsort
+ ) as rownum, + strcolumn + from + strtable
+ with(nolock) + strwhere
+ ) as d where rownum between + start_id + and
+ end_id + order by + strsort;
rs = statement.executequery(strsql);
//获取总页数
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>
td class=internalheader>简介td>
tr>
long i = 1;
while (rs.next()) {
long 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>
td class=normalfieldtwo>rs.getstring(5)%>td>
tr>
i++;
}
%>
table>
br>
table width=100% border=0 class=internalheader>
tr>
td>
div align=center>
out.print();
//显示第一页或者前一页的链接
//如果当前页不是第1页,则显示第一页和前一页的链接
if (pageno != 1) {
prevstart = pageno - 1;
out.print(第一页 : );
out.print( + prevstart
+ >前一页);
}
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( + c + > + c
+ );