纯JSP分页代码之sqlserver2005/2008
昨天看到一篇《纯JSP分页代码 》的文章,是用于mysql,稍微修改下,用于Sqlserver2005/2008,没有异常处理。没有考虑性能等。
现将代码贴出,以供初学者参考:
注:邀月使用环境Eclipse 3.4.2+Tomcat 6.18+Sqlserver2005 sp3调试成功。
页面pagelistDemo.jsp内容:
<%@ 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" mce_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("<font size=4>");
//显示第一页或者前一页的链接
//如果当前页不是第1页,则显示第一页和前一页的链接
if (PageNo != 1) {
PrevStart = PageNo - 1;
out.print("<a href="pagelistDemo.jsp?PageNo=1" mce_href="pagelistDemo.jsp?PageNo=1">第一页 </a>: ");
out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.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="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c
+ "</a>");
} else {
out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c
+ "</a> ,");
}
} else {
if (PageNo == MaxPage) {
out.print(c);
break;
} else {
out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c
+ "</a>");
break;
}
}
}
out.print("]");
;
if (PageNo < MaxPage) { //如果当前页不是最后一页,则显示下一页链接
NextPage = PageNo + 1;
out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.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="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + MaxPage
+ ">最后一页</a>");
}
out.print("</font>");
%>
</div>
</td>
</tr>
</table>
<%
rs.close();
statement.close();
connection.close();
%>
</body>
</html>

<!-- {cps..0}-->
<%
@pagelanguage
=
"
java
"
contentType
=
"
text/html;charset=UTF-8
"
pageEncoding
=
"
UTF-8
"
%>
<%
//
连接字符串
Stringurl
=
"
jdbc:sqlserver://
"
+
Globals.Server
+
"
;databaseName=
"
+
Globals.DbName;
Class.forName(Globals.driverName).newInstance();
Connectionconnection
=
DriverManager.getConnection(url,
Globals.username,Globals.pwd);
Statementstatement
=
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
);
%>
<!
DOCTYPEhtmlPUBLIC
"
-//W3C//DTDHTML4.01Transitional//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
>
<
metahttp
-
equiv
=
"
Content-Type
"
content
=
"
text/html;charset=UTF-8
"
>
<
title
>
分页显示记录
</
title
>
<
linkrel
=
"
stylesheet
"
href
=
"
style.css
"
type
=
"
text/css
"
>
</
head
>
<%
//
获取总记录数
ResultSetrs
=
statement
.executeQuery(
"
selectcount(P_ID)fromproduct
"
);
rs.next();
RecordCount
=
rs.getInt(
1
);

//
取特定页数的数据
StringstrColumn
=
"
P_ID,P_Name,LoginID,modTime,P_SingleIntro
"
;
StringstrTable
=
"
Product
"
;
StringstrSort
=
"
p_IDdesc
"
;
StringPKID
=
"
P_ID
"
;
StringstrSql
=
""
;
StringstrWhere
=
""
;
StringSTART_ID
=
Integer.toString((PageNo
-
1
)
*
PageSize
+
1
);
StringEND_ID
=
Integer.toString(PageNo
*
PageSize);
strSql
=
"
SELECT
"
+
strColumn
+
"
FROM(SELECTROW_NUMBER()OVER(ORDERBY
"
+
strSort
+
"
)ASrownum,
"
+
strColumn
+
"
FROM
"
+
strTable
+
"
WITH(NOLOCK)
"
+
strWhere
+
"
)ASDWHERErownumBETWEEN
"
+
START_ID
+
"
AND
"
+
END_ID
+
"
ORDERBY
"
+
strSort;
rs
=
statement.executeQuery(strSql);

//
获取总页数
MaxPage
=
RecordCount
%
PageSize;

if
(RecordCount
%
PageSize
==
0
)
{
MaxPage
=
RecordCount
/
PageSize;

}
else
{
MaxPage
=
RecordCount
/
PageSize
+
1
;
}
%>
<
body
class
=
"
UsePageBg
"
>
<
tablewidth
=
"
100%
"
border
=
"
0
"
class
=
"
InternalHeader
"
>
<
tr
>
<
tdwidth
=
"
24%
"
><
fontsize
=
4
>
分页显示记录
</
font
></
td
>
<
tdwidth
=
"
76%
"
><
fontsize
=
4
><%=
"
总共
"
+
RecordCount
+
"
条记录-当前页:
"
+
PageNo
+
"
/
"
+
MaxPage
%></
font
></
td
>
</
tr
>
</
table
>

<
br
>
<
tablewidth
=
"
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
>
<
tablewidth
=
"
100%
"
border
=
"
0
"
class
=
"
InternalHeader
"
>
<
tr
>
<
td
>
<
divalign
=
"
center
"
>
<%
out.print(
"
<fontsize=4>
"
);
//
显示第一页或者前一页的链接
//
如果当前页不是第1页,则显示第一页和前一页的链接

if
(PageNo
!=
1
)
{
PrevStart
=
PageNo
-
1
;
out.print(
"
<ahref=pagelistDemo.jsp?PageNo=1>第一页</a>:
"
);
out.print(
"
<ahref=pagelistDemo.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(
"
<ahref=pagelistDemo.jsp?PageNo=
"
+
c
+
"
>
"
+
c
+
"
</a>
"
);

}
else
{
out.print(
"
<ahref=pagelistDemo.jsp?PageNo=
"
+
c
+
"
>
"
+
c
+
"
</a>,
"
);
}

}
else
{

if
(PageNo
==
MaxPage)
{
out.print(c);
break
;

}
else
{
out.print(
"
<ahref=pagelistDemo.jsp?PageNo=
"
+
c
+
"
>
"
+
c
+
"
</a>
"
);
break
;
}
}
}

out.print(
"
]
"
);
;


if
(PageNo
<
MaxPage)
{
//
如果当前页不是最后一页,则显示下一页链接
NextPage
=
PageNo
+
1
;
out.print(
"
<ahref=pagelistDemo.jsp?PageNo=
"
+
NextPage
+
"
>下一页</a>
"
);
}

//
同时如果当前页不是最后一页,要显示最后一页的链接

if
(PageNo
<
MaxPage)
{
LastRec
=
RecordCount
%
PageSize;

if
(LastRec
==
0
)
{
LastStartRecord
=
RecordCount
-
PageSize;

}
else
{
LastStartRecord
=
RecordCount
-
LastRec;
}

out.print(
"
:
"
);
out.print(
"
<ahref=pagelistDemo.jsp?PageNo=
"
+
MaxPage
+
"
>最后一页</a>
"
);
}
out.print(
"
</font>
"
);
%>
</
div
>
</
td
>
</
tr
>
</
table
>
<%
rs.close();
statement.close();
connection.close();
%>
</
body
>
</
html
>
<!-- {cps..0}-->
用到的类文件:Globals.java
/**
*
*/
package net.data.util;
/** *//**
* @author Administrator
*
*/
public class Globals {
public static String username="sa";
public static String pwd="sa";
public static String DbName="TestData";
//public static String Server="192.168.30.6";
public static String Server="192.168.44.2:1433";
public static String Port="1433";
public static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
// public static String connectionURL {
//
// return "jdbc:sqlserver://"+Server+":"+Port+";databaseName="+DbName;
// }
}

<!-- {cps..1}-->
/***/
/**
*
*/
package
net.data.util;


/***/
/**
*
@author
Administrator
*
*/

public
class
Globals
{
public
static
Stringusername
=
"
sa
"
;
public
static
Stringpwd
=
"
sa
"
;
public
static
StringDbName
=
"
TestData
"
;
//
publicstaticStringServer="192.168.30.6";
public
static
StringServer
=
"
192.168.44.2:1433
"
;
public
static
StringPort
=
"
1433
"
;

public
static
StringdriverName
=
"
com.microsoft.sqlserver.jdbc.SQLServerDriver
"
;
//
publicstaticStringconnectionURL{
//
//
return"jdbc:sqlserver:
//
"+Server+":"+Port+";databaseName="+DbName;
//
}

}
<!-- {cps..1}-->
效果如图: