zoukankan      html  css  js  c++  java
  • 分页查询的实现原理

    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" onclick="clickIt()"/>
    108 </div>
    109 </body>
    110 </html>

    演示效果如下所示:

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

  • 相关阅读:
    Redis 配置为 Service 系统服务
    java.lang.IllegalStateException: The platform metadata area could not be written
    SpringCloud Gateway做熔断降级+限流
    Mac mysql修改my.cnf不起作用排查
    MailHealthIndicator javax.mail.MessagingException: Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 25, response: -1
    Spring Cloud Gateway跨域配置
    一、Rancher单机搭建
    SpringCloud快速搭建微服务
    在Mac下为GUI程序设定环境变量
    Spring cache 使用说明
  • 原文地址:https://www.cnblogs.com/honglikeji/p/7531268.html
Copyright © 2011-2022 走看看