数据库分页显示是Web应用程序常遇到的问题。用户的数据查询结果太多,超过计算机屏幕显示的范围时,为了方便用户,采用数据库分页显示的方式。
分页显示:就是将数据库中的结果集人为地分成一段一段地来显示,这里需要两个初始参数:
(1) 每页多少条记录(PageSize);
(2) 当前是第几页(CurrentPageID);
通过操作一个结果集ResultSet,就可以显示某段特定的结果出来。至于其他的参数,如上一页(PreviousePageID)、下一页(NextPageID)、总页数(numPages)等,都可以根据前边的参数得到。首先获取记录集中记录的数目,假设总记录数为m,每页显示数量是n,那么总页数的计算公式是:如果m/n的余数大于0,总页数=m/n的商+1;如果m/n的余数等于0,总页数=m/n的商。即:
总页数=(m%n)==0 ? (m/n): (m/n +1);
如果要显示P页的内容,应当把游标移动到第(P-1)*n+1条记录处。
代码如下
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.Statement" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/12/29
Time: 22:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
try {
//数据库连接代码
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(".......");
ResultSet rs = null;
Statement statement = conn.createStatement();
%>
<table border="0" cellpadding="4" cellspacing="1" bgcolor="#CBD8AC" width="100%">
<tr align="center" bgcolor="#FAFAF1">
<td>业主账号</td>
<td>姓名</td>
<td>电话</td>
</tr>
<%
String sql = "select * from USER";//查询所有数据
rs = statement.executeQuery(sql);
int intPageSize; //一页显示的记录数
int intRowCount; //记录的总数
int intPageCount; //总页数
int intPage; //待显示的页码
String strPage;
int i;
intPageSize = 3;//设置一页显示的记录数
strPage = request.getParameter("page");//取得待显示的页码
if (strPage == null)
//判断strPage是否等于null,如果是,显示第一页数据
{
intPage = 1;
} else {
intPage = java.lang.Integer.parseInt(strPage);
//将字符串转换为整型
}
if (intPage < 1) {
intPage = 1;
}
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("userid")%>
</td>
<td><%=rs.getString("name")%>
</td>
<td><%=rs.getString("password")%>
</td>
</tr>
<%
rs.next();
i++;
}
rs.close();//关闭连接,释放资源
statement.close();
conn.close();%>
<tr>
<td colspan="6">共<%=intRowCount%>条记录,共
<%=intPageCount%>页/ 当前为第<%=intPage%>页
<%
for (int j = 1; j <= intPageCount; j++) {
out.print(" <a href='test.jsp?page=" + j + "'>" + j + "</a>");//跳转到第几页
}
} catch (Exception e) {
e.printStackTrace();
}
%></td>
</tr>
</table>
</body>
</html>
结果显示如下图
第二页显示