分页查询的实现原理

来源:互联网 发布:我的世界java.net 编辑:程序博客网 时间:2024/06/03 12:28

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      * @return6      */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             //第四步执行sql16             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 record4      * @return5      */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             //第四步执行sql15             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" >107     <input type="button" value="go" onclick="clickIt()"/>108 </div>109 </body>110 </html>

演示效果如下所示:

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

 

0 0
原创粉丝点击