jsp分页查询

1.jsp实现分页查询

1.分页查询实现思路
在这里插入图片描述

下面进入代码:
ps:我用的三层架构做的

public interface StudentDao {
 public int getCount();
 public int getPages(int count,int size);
 public List<Student> doPage(int pindex,int size);
 }

在这里定义了三个方法,每个方法都有不一样的作用,比如第一个用来获取数量,第二用来计算总页码,第三个用来总分页查询,
ps:这的我定义的接口

public class StudentDaoimpl implements StudentDao{
 //创建对象
 PreparedStatement ps=null;
 ResultSet res=null;
 
 @Override
 public int getCount() {
  //定义数据总量
  int count =0;
  //创建sql
  String sql="select count(1) from student";
  //创建ps
  try {
   ps=BaseDao.getconn().prepareStatement(sql);
   //执行sql
   res=ps.executeQuery();
   //直接获取数据
   if(res.next()){
    count=res.getInt(1);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   BaseDao.close(ps, res);
  }
  return count;
 }
 //计算总页数
 @Override
 public int getPages(int count, int size) {
  //定义总页数
  int zong=0;
  //进行判断
  if (count%size==0) {
   zong=count/size;
  } else {
   zong=count/size+1;
  }
  return zong;
 }
 @Override
 public List<Student> doPage(int pindex, int size) {
  //创建集合
  List<Student> list=new ArrayList<Student>();
  //创建sql
  String sql="select * from student limit ?,?";
  //创建ps
  try {
   ps=BaseDao.getconn().prepareStatement(sql);
   //替换占位符
   ps.setObject(1, (pindex-1)*size);
   ps.setObject(2, size);
   //执行sql
   res=ps.executeQuery();
   //遍历res
   while(res.next()){
    //创建学生对象
    Student stu=new Student(res.getInt(1),res.getString(2), 
      res.getString(3),res.getString(4), 
      res.getInt(5), res.getString(6), res.getString(7),
      res.getDate(8), res.getString(9), res.getString(10));
    //将数据存入集合
    list.add(stu);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   BaseDao.close(ps, res);
  }
  return list;
 }
}

这是我的数据访问层,大白话就是和数据库发生交互的
首先我什么我编写了一个接口然后这里编写的一个实现类去实现里面的方法,类似于后台,

//设置编码格式
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
  //创建session
  HttpSession session = request.getSession();
  //创建业务逻辑层对象
  StudentService ss=new StudentServiceimpl();
  //定义每页显示的数量
  int size=4;
  //调用方法获取总数量
  int count =ss.getCount();
  //调用方法计算总页数
  int zong=ss.getPages(count, size);
  //在请求路径当中获取页面
  String pindex=request.getParameter("pindex");
  //做出判断
  if(pindex==null){
   pindex="1";
  }
  //进行类型转换
  int index=Integer.parseInt(pindex);
  //进行溢出处理
  if(index<1){
   index=1;
  }
  if(index>zong){
   index=zong;
  }
  //调用实现分页方法
  List<Student> list = ss.doPage(index, size);
  //绑定数据传入index
  session.setAttribute("list", list);
  session.setAttribute("pindex", index);
  session.setAttribute("zong", zong);
  //跳转页面
  response.sendRedirect("index.jsp");
 }

中间省略一步业务逻辑层比较简单就不展示了,这是创建的是一个servlet充当一个服务器,注释写的比较详细,

<table border="1" cellspacing="0" width="400px">
<tr>
<td>学号</td>
<td>姓名</td>
<td>性别</td> 
<td>出生日期</td>
</tr>
<c:forEach items="${list }" var="s">
<tr>
<td>${s.studentno }</td>
<td>${s.studentname }</td>
<td>${s.sex }</td>
<td>${s.borndate }</td>
</tr>
</c:forEach>
</table>
<a href="StudentServlet?pindex=1">首页</a>
<a href="StudentServlet?pindex=${pindex-1 }">上一页</a>
<a href="StudentServlet?pindex=${pindex+1 }">下一页</a>
<a href="StudentServlet?pindex=${zong }">尾页</a>

上面就是我的展示层,展示数据

接下来看效果图:
在这里插入图片描述
在这里插入图片描述

主要实现步骤:使用了JDBC,配备了数据源,jar包 核心标签库等。。。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 JSP 分页查询代码示例: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <% // 连接数据库 String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); // 获取当前页码和每页显示的记录数 int currentPage = Integer.parseInt(request.getParameter("currentPage")); int pageSize = Integer.parseInt(request.getParameter("pageSize")); // 计算起始记录的索引 int startIndex = (currentPage - 1) * pageSize; // 查询总记录数 String countSql = "SELECT COUNT(*) FROM user"; PreparedStatement countStmt = conn.prepareStatement(countSql); ResultSet countRs = countStmt.executeQuery(); countRs.next(); int totalCount = countRs.getInt(1); // 查询当前页的记录 String dataSql = "SELECT * FROM user LIMIT ?, ?"; PreparedStatement dataStmt = conn.prepareStatement(dataSql); dataStmt.setInt(1, startIndex); dataStmt.setInt(2, pageSize); ResultSet dataRs = dataStmt.executeQuery(); // 输出查询结果 out.println("<table>"); out.println("<tr><th>ID</th><th>姓名</th><th>年龄</th></tr>"); while (dataRs.next()) { out.println("<tr>"); out.println("<td>" + dataRs.getInt("id") + "</td>"); out.println("<td>" + dataRs.getString("name") + "</td>"); out.println("<td>" + dataRs.getInt("age") + "</td>"); out.println("</tr>"); } out.println("</table>"); // 输出分页导航 int totalPage = (int) Math.ceil((double) totalCount / pageSize); out.println("<div>"); out.println("<a href='?currentPage=1&pageSize=" + pageSize + "'>首页</a>"); if (currentPage > 1) { out.println("<a href='?currentPage=" + (currentPage - 1) + "&pageSize=" + pageSize + "'>上一页</a>"); } if (currentPage < totalPage) { out.println("<a href='?currentPage=" + (currentPage + 1) + "&pageSize=" + pageSize + "'>下一页</a>"); } out.println("<a href='?currentPage=" + totalPage + "&pageSize=" + pageSize + "'>末页</a>"); out.println("</div>"); // 关闭数据库连接 dataRs.close(); dataStmt.close(); countRs.close(); countStmt.close(); conn.close(); %>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值