发布于2026-07-22 阅读(0)
扫一扫,手机访问
在Web开发中,分页查询是再常见不过的需求了。本篇通过一个完整的JSP+MySQL实例,手把手带你实现网页端的分页功能。代码风格清晰,注释到位,可以直接拿来用或改造。
分页查询离不开两个关键SQL:
(1)查询总记录数,用于计算总页数:
select count(*) from 表名;
(2)每次查询指定条数的数据,利用limit控制起始索引和返回条数:
select * from 表名 limit 0,2;
其中第一个参数是起始索引(从0开始),第二个参数是每页要显示的条数。比如这里每页显示2条记录。
之前已经写过DBconnection数据库连接类和Author实体类,这里不再重复贴出,可以回顾之前的文章。下面直接看各个模块。
一个简单的入口页,点击链接跳转到分页查询的Servlet。
<%@ page language="ja va" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>Insert title here 用户列表分页查询
这是结果展示页,用JSTL遍历结果集,并实现首页、上一页、下一页、尾页的导航控制。注意这里通过pageBean对象获取当前页、总页数、总记录数等信息,分情况处理边界条件。
<%@ page language="ja va" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://ja va.sun.com/jsp/jstl/core" %>查询页面
| 编号 | 名称 | 价格 | 数量 | 日期 | 风格 |
| ${author.id} | ${author.name } | ${author.price } | ${author.num } | ${author.dates} | ${author.style} |
这一层封装了所有数据库操作,包括登录验证、全量查询、获取总记录数、分页查询、新增和删除。分页查询的关键方法是queryUserListPage(int pageIndex, int pageSize),通过limit ?,?动态传入起始索引和每页条数。
package com.dao;
import ja va.sql.Connection;
import ja va.sql.PreparedStatement;
import ja va.sql.ResultSet;
import ja va.sql.SQLException;
import ja va.util.ArrayList;
import ja va.util.List;
import com.entity.Author;
public class AuthorDao {
public Author check(String username ,int password ) {
Author obj = null ;
try {
DBConnection db = new DBConnection();
Connection conn = db.getConn();
String sql="select *from furnitures where name = ? and id = ?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setInt(2,password);
ResultSet rs = ps.executeQuery();
if(rs.next()) {
obj = new Author();
obj.setId(rs.getInt(1));
obj.setName(rs.getString(2));
obj.setPrice(rs.getInt(3));
obj.setNum(rs.getInt(4));
obj.setDates(rs.getString(5));
obj.setStyle(rs.getString(6));
}
} catch (SQLException e) {
e.printStackTrace();
}
return obj;
}
/**
* 用户列表信息查询
* @return
*/
public List queryAuthorList(){
Author obj = null ;
List list = new ArrayList();
try {
DBConnection db = new DBConnection();
Connection conn = db.getConn();
String sql="select *from furnitures";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
obj = new Author();
obj.setId(rs.getInt(1));
obj.setName(rs.getString(2));
obj.setPrice(rs.getInt(3));
obj.setNum(rs.getInt(4));
obj.setDates(rs.getString(5));
obj.setStyle(rs.getString(6));
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 查询用户表总记录数
* @return
*/
public int queryUserListCount() {
DBConnection db;
try {
db = new DBConnection();
Connection conn = db.getConn();
String sql = "select count(*) from furnitures";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()) {
return rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
/**
* 查询用户分页数据
* @param pageIndex 数据起始索引
* @param pageSize 每页显示条数
* @return
*/
public ListqueryUserListPage(int pageIndex,int pageSize){
Author obj = null;
List list = new ArrayList();
try {
Connection conn = new DBConnection().getConn();
String sql = "select * from furnitures limit ?,?;";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, pageIndex);
ps.setObject(2,pageSize);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
obj = new Author();
obj.setId(rs.getInt(1));
obj.setName(rs.getString(2));
obj.setPrice(rs.getInt(3));
obj.setNum(rs.getInt(4));
obj.setDates(rs.getString(5));
obj.setStyle(rs.getString(6));
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 用户新增
* @param obj
*/
public void add(Author obj) {
try {
DBConnection db = new DBConnection();
Connection conn = db.getConn();
String sql="insert into furnitures values(id,?,?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setObject(1, obj.getName());
ps.setObject(2, obj.getPrice());
ps.setObject(3, obj.getNum());
ps.setObject(4,obj.getDates());
ps.setObject(5, obj.getStyle());
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
//删除用户
public void del(int id) {
try {
DBConnection db = new DBConnection();
Connection conn = db.getConn();
String sql="delete from furnitures where id = ?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setObject(1, id);
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Servlet接收前端传入的当前页码,调用Dao获取总记录数,再通过PageBean计算起始索引,查询分页数据,最后将封装好的PageBean对象存入request,转发到JSP页面。
package com.servlet;
import ja va.io.IOException;
import ja va.util.List;
import ja vax.servlet.ServletException;
import ja vax.servlet.annotation.WebServlet;
import ja vax.servlet.http.HttpServlet;
import ja vax.servlet.http.HttpServletRequest;
import ja vax.servlet.http.HttpServletResponse;
import com.dao.AuthorDao;
import com.entity.Author;
import com.util.PageBean;
/**
* Servlet implementation class AuthorListPageServlet
*/
@WebServlet("/AuthorListPageServlet")
public class AuthorListPageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AuthorListPageServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
int pageSize = 2;
AuthorDao ad = new AuthorDao();
//总记录数
int record = ad.queryUserListCount();
//接收页面传入的页码
String strPage = request.getParameter("currPage");
int currPage = 1;//默认第一页
if(strPage != null) {
currPage = Integer.parseInt(strPage);
}
PageBean pb = new PageBean(currPage,pageSize,record);
//查询某一页的结果集
List list = ad.queryUserListPage(pb.getPageIndex(), pageSize);
pb.setList(list);
request.setAttribute("pageBean", pb);
request.getRequestDispatcher("userlistpage.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
这个类负责计算起始索引、总页数,并持有当前页的结果集。构造函数中自动处理边界情况,比如当前页小于1时置为1,大于总页数时置为总页数。
package com.util; import ja va.util.List; public class PageBean{ private int currentPage;//当前页码 private int pageIndex;//数据起始索引 private int pageSize;//每页条数 private int record;//总记录数 private int totalPage;//总页数 private List list;//每页显示的结果集 /** * 构造方法初始化pageIndex和totalPage * @param currentPage * @param pageIndex * @param pageSize */ public PageBean(int currentPage,int pageSize,int record) { this.currentPage = currentPage; this.pageSize = pageSize; this.record = record; //总页数 if(record % pageSize == 0) { //整除,没有多余的页 this.totalPage = record / pageSize; } else { //有多余的数据,再增加一页 this.totalPage = record / pageSize + 1; } //计算数据起始索引pageIndex if(currentPage < 1) { this.currentPage = 1; } else if(currentPage > this.totalPage) { this.currentPage = this.totalPage; } this.pageIndex = (this.currentPage -1)*this.pageSize; } // getter/setter 略 public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getRecord() { return record; } public void setRecord(int record) { this.record = record; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List getList() { return list; } public void setList(List list) { this.list = list; } }
(1)首页:

(2)中间页:

(3)尾页:

以上就是整个分页查询的实现过程,代码可以直接部署运行,根据实际项目调整每页显示条数、表名等参数即可。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8