在实际应用中,如果从数据库中查询的记录特别的多,甚至超过了显示屏的显示范围,这个时候可将结果进行分页显示。
假设总记录数为intRowCount,每页显示的数量为inPageSize,总页数为intPageCount,那么总页数的计算公式如下:
如果:(intRowCount%intPageSize)>0,则intPageCount=intRowCount/intPageSize+1
如果:(intRowCount%intPageSize)=0,则intPageCount=intRowCount/intPageSize
翻页后显示intPage页的内容,将记录指针移动到(intPage-1)*intPageSize+1
建立pageBreak.jsp文件,代码如下
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html" pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charest=UTF-8">
<title>JSP分页浏览</title>
</head>
<body>
<div align="center">
分页显示记录内容
<hr>
<table border="1" bgcolor="cccfff" align="center">
<tr>
<th>学号</th>
<th>班级</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
</tr>
<%
String DBDRIVER="org.gjt.mm.mysql.Driver"; //我用的mysql数据库
String DBURL="jdbc:mysql://localhost:3306/example";
String DBUSER="root";
String DBPASS="mysqladmin";
String sql="select * from paging";
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
int i;
String strPage;
intPageSize=5; //设置一页显示的记录数
//取得待显示页码
strPage=request.getParameter("page");
if(strPage==null){ //没有page这个属性
intPage=1;
}else{
intPage=java.lang.Integer.parseInt(strPage);
if(intPage<1){
intPage=1;
}
}
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
rs.last(); //光标指向查询结果集的最后一条记录
intRowCount=rs.getRow(); //获取记录总数
intPageCount=(intRowCount+intPageSize-1)/intPageSize; //计算总页数
if(intPage>intPageCount){ //调整待显示的页码
intPage=intPageCount;
}
if(intPageCount>0){
rs.absolute((intPage-1)*intPageSize+1); //将记录指针定位在待显示页的第一天记录上
}
//显示数据
i=0;
while(i<intPageSize&&!rs.isAfterLast()){
%>
<tr>
<td><%=rs.getString("stuNumber") %></td> //从数据库读取记录
<td><%=rs.getString("stuBanji") %></td>
<td><%=rs.getString("stuName") %></td>
<td><%=rs.getString("stuSex") %></td>
<td><%=rs.getString("stuAge") %></td>
</tr>
<%
rs.next();
i++;
}
%>
</table>
<hr>
<div align="center">
第<%=intPage %>页 共<%=intPageCount %>页
<%
if(intPage>1){
%>
<a href="pageBreak.jsp?page=<%=intPage-1%>">上一页</a>
<%
} //下一页
if(intPage<intPageCount){
%>
<a href="pageBreak.jsp?page=<%=intPage+1%>">下一页</a>
<%
}
rs.close();
stmt.close();
conn.close();
%>
</div>
</div>
</body>
</html>
显示结果如下:
1、
2、
3、
数据库代码为:
create database example;
create table paging(
stuNumber varchar(15),
stuBanji varchar(10),
stuName varchar(50),
stuSex varchar(4),
stuAge int
);
INSERT INTO paging(stuNumber,stuBanji,stuName,stuSex,stuAge) VALUES ('2012040101207','24010105','鲍礼彬','男',23);