查询信息时对数据进行分页显示

要对数据在前台进行分页显示,首先要了解几个数据:

1.数据有多少条(count)

2.每页显示几条数据(pageSize)

---count的值通过遍历数据所在的表来获得()

public static int Count(String tablename) {
  conn = DBTool.getConnection();
  String sql = "select count(1) from "+tablename+" ";
  int num = 0;
  try {
    ps = conn.prepareStatement(sql);
  //    ps.setString(1,tablename);
  ResultSet rs = ps.executeQuery();
  if(rs.next()) {
    num = rs.getInt(1);
  }    
  } catch (SQLException e) {
    e.printStackTrace();
  }finally {
    DBTool.closeConnection();
  }
  return num;
}

获取的大致方法可参照上方代码

---pageSize的值由自己指定


两个值得到后你可以通过计算得到末页的数值(lastPage)

lastPage=count%pageSize ? count/pageSize : count/pageSize+1;(三元表达式不熟的可以百度一下)

大致意思就是如果pageSize被count整除(用取余来判断最终整除的情况,没有余数就是能整除),那么末页的值就等于count/pageSize的值,如果不被整除,末页的值就应该等于count/pageSize+1(这是一个简单的数学常识问题,我可能说不大明白,不懂的思考下)


准备工作完成后,开始处理主要的逻辑

分页操作的话前台设定的操作一般为:首页  上一页  下一页  末页

你需要在后台设定一个值代表当前页面要显示页数(index)

首页 index=1

上一页/下一页 index = index±1

末页 index=lastPage

后台代码如下

public void queryTasks(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String page = request.getParameter("index");//或取前台传过来的页数,如果为空,设定页数为首页
        int index = 1;
        if(page == null || !(page.length()>0)) {
            index= 1;
        }else {
            index = Integer.parseInt(page);
        }
        int num = service.CountTaskNum();//任务总数
        int pageSize = 5;//每页显示5条任务信息
        int lastPage = num%pageSize==0?num/pageSize:num/pageSize+1;
        if(index<=1) {//当在首页点击上一页或末页点击下一页的逻辑处理
            index =1;
        }else if(index >= lastPage) {
            index = lastPage;
        }
        List<Task> tasks = service.queryTasks((index-1)*pageSize, pageSize);
        List<String> list = new ArrayList<>();
        for(int i = 0;i<tasks.size();i++) {
            String[] res1 = tasks.get(i).getTaskReward().split("\*");
            String[] res2 = tasks.get(i).getTaskRewardNum().split("\*");
            String result = "";
            for(int j = 0;j<res1.length;j++) {
                if(!("").equals(res1[j]) && !("").equals(res2[j])) {
                    System.out.println(res1[j]+"*"+res2[j]);
                    result+=res1[j]+"*"+res2[j];
                }
            }
            list.add(result);
        }
        request.setAttribute("reward",list);
        request.setAttribute("tasks", tasks);
        request.setAttribute("index", index);
        request.setAttribute("last",lastPage);
        request.getRequestDispatcher("showTask.jsp").forward(request, response);
    }

  代码部分参照即可。

前台的按钮代码

<a href="TaskServlet?method=queryTasks&index=1">首页</a>
<a href="TaskServlet?method=queryTasks&index=${index-1}">上一页</a>
<a href="TaskServlet?method=queryTasks&index=${index+1}">下一页</a>
<a href="TaskServlet?method=queryTasks&index=${last}">尾页</a>

大致情况就是这样了

  

原文地址:https://www.cnblogs.com/-217/p/12603128.html