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>

    演示效果如下所示:

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

  • 相关阅读:
    修复 Visual Studio Error “No exports were found that match the constraint”
    RabbitMQ Config
    Entity Framework Extended Library
    Navisworks API 简单二次开发 (自定义工具条)
    NavisWorks Api 简单使用与Gantt
    SQL SERVER 竖表变成横表
    SQL SERVER 多数据导入
    Devexpress GridControl.Export
    mongo DB for C#
    Devexress XPO xpPageSelector 使用
  • 原文地址:https://www.cnblogs.com/honglikeji/p/7531268.html
Copyright © 2011-2022 走看看