通过sql语句查询实现分页

通过sql语句分页 如:SELECT * FROM users limit 3,2 从第4条记录开始后续显示两行,索引从0开始 (服务器机制)该方式的优缺点如下:
  优点:操作便捷(利用服务器内存),适合于大数据量操作,对底层数据库服务器起到保护作用。
  缺点:增加了和数据库交互的次数,访问速度较慢。

代码实现如下:

  1. 首先我们定义一个pageBean用来定义分页的相关信息。包括:pageSize每页显示的条目数,nowPage当前页码,rowCount总行数即总结果集,pageCount总页数,rowDate是list集合用来存放每页显示的结果集。
    Java代码   收藏代码
    1. public class PageBean {  
    2.     // 成员变量  
    3.     private int pageSize = 0;// 页大小  
    4.     private int nowPage = 0;// 当前页面  
    5.     private int rowCount = 0;// 总行数  
    6.     private int pageCount = 0;// 页数  
    7.     private List<?> rowDate = null;  
    8.   
    9.     // 成员函数  
    10.     public int getPageSize() {  
    11.         return pageSize;  
    12.     }  
    13.   
    14.     public void setPageSize(int pageSize) {  
    15.         this.pageSize = pageSize;  
    16.     }  
    17.   
    18.     public int getNowPage() {  
    19.         return nowPage;  
    20.     }  
    21.   
    22.     public void setNowPage(int nowPage) {  
    23.         this.nowPage = nowPage;  
    24.     }  
    25.   
    26.     public int getRowCount() {  
    27.         return rowCount;  
    28.     }  
    29.   
    30.     public void setRowCount(int rowCount) {  
    31.         this.rowCount = rowCount;  
    32.     }  
    33.   
    34.     public int getPageCount() {  
    35.         this.pageCount = rowCount % pageSize == 0 ? rowCount / pageSize  
    36.                 : rowCount / pageSize + 1;  
    37.         return pageCount;  
    38.     }  
    39.   
    40.     public List<?> getRowDate() {  
    41.         return rowDate;  
    42.     }  
    43.   
    44.     public void setRowDate(List<?> rowDate) {  
    45.         this.rowDate = rowDate;  
    46.     }  
    47.   
    48.     public PageBean(int pageSize, int nowPage, int rowCount, int pageCount,  
    49.             List<?> rowDate) {  
    50.         super();  
    51.         this.pageSize = pageSize;  
    52.         this.nowPage = nowPage;  
    53.         this.rowCount = rowCount;  
    54.         this.pageCount = pageCount;  
    55.         this.rowDate = rowDate;  
    56.     }  
    57.   
    58.     public PageBean() {  
    59.         super();  
    60.         // TODO Auto-generated constructor stub  
    61.     }  
    62.   
    63. }  
     
  2. 在对系统中的每个实体的DAO层实现分页。在该函数中需要pageSize ,nowPage两个参数;foodInfoCount())是用来获取总结果集的行数;该函数返回的是个pageBean对象。
    Java代码   收藏代码
    1. public PageBean foodInfoByPage(int pageSize, int nowPage) {  
    2.         PageBean pb = new PageBean();  
    3.         pb.setPageSize(pageSize);  
    4.         pb.setNowPage(nowPage);  
    5.         pb.setRowCount(foodInfoCount());  
    6.         //step1:sql  
    7.         String sql ="select food_id,food_name,food_price,food_img,food_desc from tb_foodinfo limit "+(nowPage-1)*pageSize +", "+pageSize;//为什么不用?;?支持where  
    8.         //step2:执行sql  
    9.         ResultSet rs = dbconn.exeStmtS(sql);  
    10.         //step3:返回结果  
    11.         List<FoodInfo> list = new ArrayList<FoodInfo>();  
    12.         try {  
    13.             while(rs.next())  
    14.             {  
    15.                 System.out.println(rs.getString(2));  
    16.                 FoodInfo finfo = new FoodInfo();  
    17.                 finfo.setFood_id(rs.getInt(1));  
    18.                 finfo.setFood_name(rs.getString(2));  
    19.                 finfo.setFood_price(rs.getFloat(3));  
    20.                 finfo.setFood_img(rs.getString(4));  
    21.                 finfo.setFood_desc(rs.getString(5));  
    22.                 list.add(finfo);  
    23.             }  
    24.         pb.setRowDate(list);  
    25.         } catch (SQLException e) {  
    26.             // TODO Auto-generated catch block  
    27.             e.printStackTrace();  
    28.         }  
    29.          return pb;  
    30.     }  
     
  3. 在业务层中调用DAO层的分页 完成分页的业务逻辑
    Java代码   收藏代码
    1. public class FoodInfoBizImpl implements FoodInfoBiz {  
    2.     //声明foodInfoDao对象  
    3.     private  FoodInfoDao fid = null;  
    4.     public FoodInfoBizImpl(){  
    5.         fid = new FoodInfoDaoImpl();  
    6.     }  
    7.     public List<FoodInfo> foodInfoAll() {  
    8.         return fid.foodInfoAll();  
    9.           
    10.     }  
    11.     public PageBean foodInfoByPage(int pageSize, int nowPage) {  
    12.         return fid.foodInfoByPage(pageSize, nowPage);  
    13.     }  
    14.   
    15. }  
     
  4. 在servlet中的doPost()方法中 控制分页。每页显示的条目数 通过在web.xml 文件中配置参数实现,当前页数通过从jsp视图界面获取,之后将返回的pageBean放入request中  
    Java代码   收藏代码
    1. int pageSize = Integer.parseInt(this.getServletConfig().getInitParameter("pageSize"));  
    2.   int nowPage = 1;  
    3.   if(request.getParameter("np")!=null)  
    4.   {  
    5.    nowPage = Integer.parseInt(request.getParameter("np"));  
    6.   }  
    7.   //step2:调用biz得到结果集  
    8.     
    9.   FoodInfoBiz fbiz = new FoodInfoBizImpl();  
    10.   PageBean pb = fbiz.foodInfoByPage(pageSize, nowPage);//改变调用方法  
    11.   //step3:把结果集存储在媒介【session、request】中 request  
    12.    
    13.   request.setAttribute("pageBean", pb);     
    14.   //step4:跳向index.jsp页面[response.sendRedirect - request必杀技]  
    15.   request.getRequestDispatcher("index.jsp").forward(request,response);//request跳向方式才能传值  
  5. jsp页面中的实现 通过从request中获取pageBean 将其中的rowDate遍历循环出来 即可实现当前页的显示
    Java代码   收藏代码
    1. <c:forEach items="${pageBean.rowDate}" var="fInfo">  
    2.         <td style="background-color:#E3EAEB;">  
    3.             <table style="width: 100%">  
    4.                 <tr>  
    5.                     <td style="width: 300px">                         
    6.                         <a href="FoodDetail?foodsid=11">  
    7.                         <img  style="border:0px" src="UpFile/foodImage/${fInfo.food_img}" alt="" height="150" width="200"/></a></td>  
    8.                     <td style="width: 550px; color: #000000; text-align: left">  
    9.   
    10.                         食品名称: &nbsp;&nbsp; &nbsp;${fInfo.food_name }<br />  
    11.                         食品价格: &nbsp; &nbsp;${fInfo.food_price}<br />  
    12.                         所在类别: &nbsp; &nbsp;热菜<br/>  
    13.   
    14.                         食品介绍: &nbsp; &nbsp; ${fInfo.food_desc}<br />  
    15.                         <a  href="OnePro.htm?pid=1">餐品留言</a>  
    16.                         <form action="AddCart" method="post" name="form1">  
    17.                         <input name="txtCount" type="text"   style="width:27px;" />  
    18.                         <input type="hidden" name="foodid" value="${fInfo.food_id }"/>  
    19.                         <input type="hidden" name="foodname" value="${fInfo.food_name }"/>  
    20.                         <input type="hidden" name="foodprice" value="${fInfo.food_price }"/>                          
    21.                         <input type="submit" name="ok" value="订餐"/>  
    22.                         </form>  
    23.                        </td>  
    24.                 </tr>  
    25.             </table>  
    26.         </td>   
    27.      </c:forEach>  
     
  6. 完成当前页的实现 即可来进行上一页 下一页的功能实现 只是传递当前页数即可
    Java代码   收藏代码
    1. <table style="width: 100%">  
    2.         <tr>  
    3.             <td>  
    4.                 一共有<span  style="color:Red;">${pageBean.pageCount }</span>页</td>  
    5.   
    6.             <td>  
    7.                 每页显示<span  style="color:Red;">${pageBean.pageSize }</span>条</td>  
    8.             <td> 当前为第<span  style="color:Red;">${pageBean.nowPage }</span>页</td>  
    9.             <td> 共<span  style="color:Red;">${pageBean.rowCount}</span>条</td>  
    10.             <td>  
    11.                 <c:if test="${pageBean.nowPage !=1 }">  
    12.                 <a href="IndexServlet?np=${pageBean.nowPage-1}"><img src="images/prev.gif" style="border-width:0px;" /></a>  
    13.                 </c:if>  
    14.                 <c:if test="${pageBean.nowPage !=pageBean.pageCount }">  
    15.                 <a href="IndexServlet?np=${pageBean.nowPage+1}"> <img src="images/next.gif" style="border-width:0px;" /></a>  
    16.                   </c:if>  
    17.                 </td>  
    18.         </tr>  
    19.     </table>  
     完成了 以上步骤 一个普通的分页 工具基本完成了....

转自  : hxlzpnyist.iteye.com/blog/1506631

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值