jsp分页

分页是对于大数据一个简单有效的显示优化,既可以快速的显示用户想要的结果,又能够大幅调高查询速度,进而提高体验和操作效果,下面先对基本原理进行简单的阐述,希望大家能够从个人的叙述中有所了解(因为习惯使用Mysql数据库进行各种验证和小功能的模拟实现,以下分页sql只在mysql中试用)。

(以下所有查询在本人自定义的数据库Text下的account表中实现)

一、定义的常量

      首先根据需求,既然分页就要用到以下几个属性:首先要定义四个变量:

int pageSize:每页显示多少条记录
      int pageNow:希望显示第几页
      int pageCount:一共有多少页
      int rowCount:一共有多少条记录
接下来,我们就要根据上述的几个属性实现简单的分页:首先看下得到以上的几个属性值得sql语句。
1、select count(*) from account;》》》rowCount   select * from account limit begin,end;
2、pageCount = rowCount/pageSize;(需要判断是否整除,如果没有整除则需要加1)
3、每页需要显示的行数根据个人需要自定义,因此pageSize应为一个常数。
4、希望显示的页数也同样是定值
二、代码的简单实现(在显示查询结果的页面底加上如下的简单代码,实现定页)

Jsp代码 

 收藏代码

  1. <div align="center">  
  2. 每页显示  
  3. <table>  
  4.     <select name="end" multiple="multiple" size="1" id="end">  
  5.     <option value="5"  selected="selected">5</option>  
  6.     <option value="10">10</option>  
  7.     <option value="15">15</option>  
  8. </select>  
  9. 数据&nbsp;  
  10. 第  
  11. <%  
  12.     int count = (Integer)(request.getAttribute("count")) ;  
  13.     int pages = (Integer)request.getAttribute("pages");  
  14.       
  15.     for(int i=1;i<=pages;i++){  
  16.         int begin=(i-1)*5;  
  17.         int end = begin+5;  
  18.             out.print("&nbsp;<a href='./servlet/List1Servlet?<strong><span style="font-size: 18px; color: #ff0000;">begin</span></strong>="+begin+"'>"+i+"</a>&nbsp;");  
  19.         }  
  20.  %>  
  21.   
  22.  页  
  23. </div>  
  24.    
  25.  <div align="right">共<%=request.getAttribute("pages") %>页<%=request.getAttribute("count") %>条数据</div>     
 显示界面的下方会出现如下图的分页提示页面

 例如,当第一次查询时我们可以先定义第一次插出的数据为前5条,则后台必有一个查询方法,接收前面传过来的begin参数(本人自定义end参数为5,意思是每页显示5条数据)

Java代码 

 收藏代码

  1. public List<Regesiters> count(int start, int end) {  
  2.         List<Regesiters> list = new ArrayList<Regesiters>();  
  3.         if (conn != null) {  
  4.             try {  
  5.                 stmt = conn.createStatement();  
  6.                 String sql = "select * from account limit "+start+","+end;  
  7.                 System.out.println(sql);  
  8.                   
  9.                 ResultSet rs = stmt.executeQuery(sql);  
  10.                 while (rs.next()) {  
  11.                     list.add(new Regesiters(rs.getInt(1),rs.getString(2), rs.getString(3), rs  
  12.                             .getInt(4),rs.getInt(5)));  
  13.                 }  
  14.                 System.out.println("======分页查询成功======="+list);  
  15.                 return list;  
  16.             } catch (SQLException e) {  
  17.                 e.printStackTrace();  
  18.             } finally {  
  19.                 DbConUtils.close(null, stmt, conn);  
  20.             }  
  21.     }  
  22.         return list;  
  23.     }  
 即第一次打开默认为第一页,两个参数分别为begin=0,end=5;当点开第二页时,传递参数给后台继续调用count(int start, int end)方法,此时begin=5,end=5;显示第6到10一共5条数据。以此类推。而后台实现如下所示:

Java代码 

 收藏代码

  1. //分页开始,count数据总数,pages分页数,每页5条数据  
  2.         int count = dao.count();  
  3.         int pages1 = count/5;  
  4.         int l = (count+4)%5;  
  5.           
  6.         if(l==0){  
  7.             pages = pages1;  
  8.         }else{  
  9.             pages = pages1+1;  
  10.         }  
  11.      req.setAttribute("count", count);  
  12.      req.setAttribute("pages", pages);  
  13.        
  14.      //判断是否为初始查询界面  
  15.       
  16.      //如果为初始页面0-5用户  
  17.      if(begin==null){  
  18.            
  19.               
  20.                 List<Regesiters> list = dao.count(0, 5);  
  21.                 req.setAttribute("list", list);  
  22.                 req.getRequestDispatcher("/list1.jsp").forward(req, resp);  
  23.      }else{  
  24.          int start = Integer.parseInt(req.getParameter("begin"));  
  25.          //int end = Integer.parseInt(req.getParameter("end"));  
  26.         List<Regesiters> list = dao.count(start,5);  
  27.         req.setAttribute("list", list);  
  28.         req.getRequestDispatcher("/list1.jsp").forward(req, resp);  
  29.      }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值