jsp中利用MySQL实现分页技术

分页是很常用的一种技术,而mysql中对于分页的操作也很简单,今天就说说如何在jsp页面中利用标签来最简化的实现分页:

链接:MySQL分页技术详解http://blog.csdn.net/u011637069/article/details/49928513

step1:编写DAO中代码:

[java] view plain copy
 
  1. public List<Employee> findAll2(int page, int perPageRows) throws Exception {  
  2.     List<Employee> employees = new ArrayList<Employee>();  
  3.     Connection conn = null;  
  4.     try{  
  5.         conn = DBUtil.getConnection();  
  6.         PreparedStatement prep =   
  7.             conn.prepareStatement("select id,name,salary,age from t_emp limit ?,?");  
  8.         prep.setInt(1, (page-1)*perPageRows);  
  9.         prep.setInt(2,perPageRows);  
  10.         ResultSet rs = prep.executeQuery();  
  11.         while(rs.next()){  
  12.             int id = rs.getInt("id");  
  13.             String name = rs.getString("name");  
  14.             double salary = rs.getDouble("salary");  
  15.             int age = rs.getInt("age");  
  16.             Employee e = new Employee(id, name, salary, age);  
  17.             employees.add(e);  
  18.         }  
  19.     }catch (Exception e) {  
  20.         e.printStackTrace();  
  21.         throw e;  
  22.     }finally{  
  23.         DBUtil.close(conn);  
  24.     }  
  25.     return employees;  
  26. }  
[java] view plain copy
 
  1. public int findPages(int perPageRows) throws Exception {  
  2.     int totalPage = 0;  
  3.     Connection conn = null;  
  4.     try{  
  5.         conn = DBUtil.getConnection();  
  6.         Statement state = conn.createStatement();  
  7.         ResultSet rs = state.executeQuery("select count(*) from t_emp");  
  8.         int rows = 0;  
  9.         if(rs.next()){  
  10.             rows = rs.getInt(1);  
  11.         }  
  12.         if(rows % perPageRows == 0){  
  13.             totalPage = rows / perPageRows;  
  14.         }else{  
  15.             totalPage = rows / perPageRows + 1;  
  16.         }  
  17.     }catch (Exception e) {  
  18.         e.printStackTrace();  
  19.         throw e;  
  20.     }finally{  
  21.         DBUtil.close(conn);  
  22.     }  
  23.     return totalPage;  
  24. }  

step2:编写servlet代码:

[java] view plain copy
 
  1. EmployeeDAO dao = (EmployeeDAO) Factory.getInstance("EmployeeDAO");  
  2. List<Employee> employees = null;  
  3. String pageStr = request.getParameter("page");  
  4.   
  5. int perPageRows = 5;  
  6. int totalPage = 0;  
  7. int page = 1;  
  8. try {  
  9.     totalPage = dao.findPages(perPageRows);  
  10.     if(pageStr!=null){  
  11.         page = Integer.parseInt(pageStr);  
  12.     }  
  13.     if(page<1 || page>totalPage){  
  14.         page = 1;  
  15.     }  
  16.     employees = dao.findAll2(page,perPageRows);  
  17.     //转发  
  18.     //step1,绑定数据  
  19.     request.setAttribute("employees",employees);  
  20.     request.setAttribute("page",page);  
  21.     request.setAttribute("totalPage",totalPage);  
  22.     //step2,获得转发器  
  23.     RequestDispatcher rd = request.getRequestDispatcher("/emplist.jsp");  
  24.     //step3,转发  
  25.     rd.forward(request, response);  
  26. catch (Exception e1) {  
  27.     e1.printStackTrace();  
  28.     //1-转发处理异常  
  29.     //request.setAttribute("syserror", "系统正忙,请稍后重试!");  
  30.     //request.getRequestDispatcher("error.jsp").forward(request, response);  
  31.     //2-交给容器处理  
  32.     throw new ServletException(e1);  
  33. }  


step3:jsp代码:

[html] view plain copy
 
  1. <c:choose>  
  2.     <c:when test="${page>1}">  
  3.         <href="list.do?page=${page-1}">上一页</a>  
  4.     </c:when>  
  5.     <c:otherwise>  
  6.         上一页  
  7.     </c:otherwise>  
  8. </c:choose>  
  9. 第${page}页  
  10. <c:choose>  
  11.     <c:when test="${page<totalPage}">  
  12.         <href="list.do?page=${page+1}">下一页</a>  
  13.     </c:when>  
  14.     <c:otherwise>  
  15.         下一页  
  16.     </c:otherwise>  
  17. </c:choose>  
  18. 共${totalPage}页  
原文地址:https://www.cnblogs.com/efforts-will-be-lucky/p/7338432.html