分页查询的实现原理

1:接着上次写的图书管理系统:http://www.cnblogs.com/biehongli/p/6445803.html

这次新增了分页查询;


 2:为什么会用到分页呢,因为列表内容太多了,所以使用分页进行显示。

分页的核心就是计算每页多少记录和总页数以及第几页。

3:首先先写如何计算每页多少记录和第几页,依旧在BookDao.java和BookDaoImpl.java中继续增加方法

在计算每页多少记录和第几页的后台核心代码如下所示:

  //第二步书写sql语句
     String sql="select * from book limit ?,? ";
     ps=con.prepareStatement(sql);//第三步:预编译
     //第几页需要设置好是页数减一乘以每页的记录数即是第多少页
     ps.setInt(1, (page-1)*record);
     ps.setInt(2, record);

1 /***
2      * 分页查询的方法
3      * @param page 第几页
4      * @param record 一页有多少记录
5      * @return
6      */
7     public List<Book> bookPage(int page,int record);
 1 @Override
 2     public List<Book> bookPage(int page, int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         try { 7 con=BaseDao.getCon();//第一步连接数据库 8 //第二步书写sql语句 9 String sql="select * from book limit ?,? "; 10 ps=con.prepareStatement(sql);//第三步:预编译 11 //第几页需要设置好是页数减一乘以每页的记录数即是第多少页 12 ps.setInt(1, (page-1)*record); 13 ps.setInt(2, record); 14 15 //第四步执行sql 16 rs=ps.executeQuery(); 17 List<Book> list=new ArrayList<Book>(); 18 while(rs.next()){ 19 Book book=new Book(); 20 book.setBookid(rs.getInt("bookid")); 21 book.setBookname(rs.getString("bookname")); 22 book.setPrice(rs.getDouble("price")); 23 book.setAuthor(rs.getString("author")); 24 book.setPic(rs.getString("pic")); 25 book.setPublish(rs.getString("publish")); 26 27  list.add(book); 28  } 29 return list; 30 } catch (ClassNotFoundException e) { 31  e.printStackTrace(); 32 } catch (SQLException e) { 33  e.printStackTrace(); 34 }finally{ 35 //关闭资源,避免出现异常 36  BaseDao.close(con, ps, rs); 37  } 38 39 return null; 40 }

4:首先先写如何计算总页数,依旧在BookDao.java和BookDaoImpl.java中继续增加方法

1 /***
2      * 获取总页数
3      * @param record
4      * @return
5      */
6     public int getCount(int record);
 1 @Override
 2     public int getCount(int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         //设置初始值为-1
 7         int n=-1; 8 try { 9 con=BaseDao.getCon();//第一步连接数据库 10 //第二步书写sql语句 11 String sql="select count(*) from book "; 12 ps=con.prepareStatement(sql);//第三步:预编译 13 14 //第四步执行sql 15 rs=ps.executeQuery(); 16 if(rs.next()){ 17 //获取第一条记录,因为查询count(1)就一条记录,获取即可,即总记录数 18 n=rs.getInt(1); 19 //将总记录数除以每页的总记录数然乎向上取整即可 20 n=(int)Math.ceil(1.0*n/record); 21  } 22 23 } catch (ClassNotFoundException e) { 24  e.printStackTrace(); 25 } catch (SQLException e) { 26  e.printStackTrace(); 27 }finally{ 28 //关闭资源,避免出现异常 29  BaseDao.close(con, ps, rs); 30  } 31 32 return n; 33 }

5:接下来直接在book.jsp进行代码的开发,完成分页功能,本页的都是核心,因为在book.jsp页面完成了如何操作上一页,下一页,跳转页数,以及完成了首页尾页的控制

  1 <%@page import="com.bie.dao.impl.BookDaoImpl"%>
  2 <%@page import="com.bie.dao.BookDao"%>
  3 <%@ page language="java" contentType="text/html; charset=UTF-8"
  4     pageEncoding="UTF-8" %>
  5 <%@ page import="java.util.List" %>
  6 <%@ page import="com.bie.po.Book" %>
  7 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
  8   
  9 <%@ include file="head.jsp" %>  
 10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 11 <html>
 12 <head>
 13 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 14 <title>图书处理页面</title>
 15 <style type="text/css">
 16 h1{text-align:center;}
 17 </style>
 18 
 19 <script type="text/javascript">
 20     function clickIt(){
 21         var p2=document.getElementById("t2").value;
 22         location.href="book.jsp?p="+p2;
 23     }
 24 </script>
 25 </head>
 26 <body>
 27 <%-- <%
 28     //第一次使用的方法
 29     Book book=new Book(); 30 BookServiceImpl service=new BookServiceImpl(); 31 List<Book> list=service.select(book); 32 %> --%> 33 34 <% 35 Book book=new Book(); 36 BookDao dao=new BookDaoImpl(); 37 //2:获取从下面上一页下一页传来的参数p 38 String p2=request.getParameter("p"); 39 40 //1:设置好第一页开始和一页有五条记录 41 int p=1; 42 int r=5; 43 //5:获取到返回的总页数,将每页的总记录数传进去 44 int count=dao.getCount(r); 45 46 //3:如果p2不为null且不为空,就转化为p 47 if(p2!=null && !p2.equals("")){ 48 p=Integer.parseInt(p2); 49  } 50 //4:如果页数为负的那么就赋值为首页 51 if(p<=0){ 52 p=1; 53  } 54 55 //6:控制后面的页数,如果大于总页数,将最后一页赋值为尾页即可 56 if(p>=count){ 57 p=count; 58  } 59 60 //7:调用分页的方法进行分页操作 61 List<Book> list=dao.bookPage(p, r); 62 63 %> 64 <h1>图书列表</h1> 65 <a href="javascript: window.history.go(-1)">返回上一级</a> 66 <table align="center" cellpadding="10" cellspacing="10"> 67 68 <tr bgcolor="green"> 69 <td>编号</td> 70 <td>书名</td> 71 <td>价格</td> 72 <td>作者</td> 73 <td>封皮</td> 74 <td>出版社</td> 75 </tr> 76 <%-- <% 77 for(Book b:list){ 78 %> --%> 79 <% 80 String bg=""; 81 for(int i=0;i<list.size();i++){ 82 Book b=list.get(i); 83 if(i%2==0) 84 bg="pink"; 85 else 86 bg="yellow"; 87 %> 88 <tr bgcolor="<%=bg%>"> 89 <td><%=b.getBookid() %></td> 90 <td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td> 91 <td><%=b.getPrice() %></td> 92 <td><%=b.getAuthor() %></td> 93 <td><%=b.getPic() %></td> 94 <td><%=b.getPublish() %></td> 95 </tr> 96 <% 97  } 98 %> 99 </table> 100 <div align="center"> 101 第<%=p %>/共<%=count %>页 102 <a href="book.jsp?p=0">首页</a> 103 <a href="book.jsp?p=<%=p-1 %>">上一页</a> 104 <a href="book.jsp?p=<%=p+1 %>">下一页</a> 105 <a href="book.jsp?p=<%=count%>">尾页</a> 106 <input type="text" size="2" id="t2"> 107 <input type="button" value="go" οnclick="clickIt()"/> 108 </div> 109 </body> 110 </html>

演示效果如下所示:

还有很多需要完善的,所以先分享一下咯,继续努力咯!!!

 

转载于:https://www.cnblogs.com/honglikeji/p/7531268.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值