数据的分页处理

当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。

原理:每次从数据库中取出一定量的数据,通过jsp页面显示

实现:

①写一个类封装分页的页面

②从数据库中取出一个页面的数据,将信息封装到分页页面对象中

③根据情况,将分页的页面对象设置到request对象、session对象或servletContext对象属性中,供jsp页面调用

④在jsp页面中显示分页数据、分页页码、上一页下一页、跳转页面等

下面看具体代码:

分页页面Page类:

  1 package cn.wzbrilliant.domain;
  2
  3 import java.util.List;
  4
  5 //界面上所有与分页有关的都找此类要
  6 public class Page {
  7     private List records;
  8     private int pagesize = 10;//每页显示的记录条数
  9     private int pagenum;//用户要看的页码即当前页码
 10     private int totalpage;//总页数
 11     private int startIndex;//每页开始记录的索引
 12     private int totalrecords;//总记录条数
 13
 14     //显示的页码
 15     private int startPage;
 16     private int endPage;
 17
 18     public Page(int pagenum,int totalrecords){
 19         this.pagenum = pagenum;
 20         this.totalrecords = totalrecords;
 21
 22         //计算每页开始记录的索引
 23         startIndex = (pagenum-1)*pagesize;
 24         //计算总页数
 25         totalpage = totalrecords%pagesize==0?totalrecords/pagesize:(totalrecords/pagesize+1);
 26
 27         //显示的页码
 28         if(totalpage<=9){
 29             startPage = 1;
 30             endPage = totalpage;
 31         }else{
 32             startPage = pagenum-4;
 33             endPage = pagenum+4;
 34             if(startPage<1){
 35                 startPage = 1;
 36                 endPage = 9;
 37             }
 38             if(endPage>totalpage){
 39                 endPage = totalpage;
 40                 startPage = totalpage-8;
 41             }
 42         }
 43     }
 44
 45     public List getRecords() {
 46         return records;
 47     }
 48
 49     public void setRecords(List records) {
 50         this.records = records;
 51     }
 52
 53     public int getPagesize() {
 54         return pagesize;
 55     }
 56
 57     public void setPagesize(int pagesize) {
 58         this.pagesize = pagesize;
 59     }
 60     public int getPagenum() {
 61         return pagenum;
 62     }
 63
 64     public void setPagenum(int pagenum) {
 65         this.pagenum = pagenum;
 66     }
 67
 68     public int getTotalpage() {
 69         return totalpage;
 70     }
 71
 72     public void setTotalpage(int totalpage) {
 73         this.totalpage = totalpage;
 74     }
 75
 76     public int getStartIndex() {
 77         return startIndex;
 78     }
 79     public void setStartIndex(int startIndex) {
 80         this.startIndex = startIndex;
 81     }
 82
 83     public int getTotalrecords() {
 84         return totalrecords;
 85     }
 86
 87     public void setTotalrecords(int totalrecords) {
 88         this.totalrecords = totalrecords;
 89     }
 90
 91     public int getStartPage() {
 92         return startPage;
 93     }
 94
 95     public void setStartPage(int startPage) {
 96         this.startPage = startPage;
 97     }
 98
 99     public int getEndPage() {
100         return endPage;
101     }
102
103     public void setEndPage(int endPage) {
104         this.endPage = endPage;
105     }
106
107 }

从数据库中取出一定条数的记录,此处以mysql为例,sql语句为select * from 表名 limit ?,?   两个问号分别为起始位置和结束位置

在jsp页面中显示分页页码、上一页下一页、跳转页面等的实现代码:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <!-- 分页的部分 -->
 3  第${page.pagenum}页/共${page.totalpage}页&nbsp;&nbsp;
 4  <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet">首页</a>&nbsp;&nbsp;
 5  <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum-1==0?1:page.pagenum-1}">上一页</a>&nbsp;&nbsp;
 6       <c:forEach begin="${page.startPage}" end="${page.endPage}" var="num">
 7             <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${num}">${num }</a>
 8       </c:forEach>
 9                   &nbsp;&nbsp;
10     <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum+1>page.totalpage?page.totalpage:page.pagenum+1}">下一页</a>&nbsp;&nbsp;
11     <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.totalpage}">尾页</a>
12     <select id="s1">
13           <c:forEach begin="1" end="${page.totalpage}" var="num">
14                  <option value="${num}" ${page.pagenum==num?‘selected="selected"‘:‘‘}>${num}</option>
15           </c:forEach>
16      </select>
17      <a href="javascript:jump()">跳转</a>
18
19 <script type="text/javascript">
20       function jump(){
21             var num = document.getElementById("s1").value;
22             window.location.href="${pageContext.request.contextPath}/servlet/ShowAllCustomersServlet?pagenum="+num;
23       }
24 </script>
时间: 2024-10-25 21:31:02

数据的分页处理的相关文章

MySQL单表百万数据记录分页性能优化

原文地址:http://www.cnblogs.com/lyroge/p/3837886.html MySQL单表百万数据记录分页性能优化 背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行. 测试环境: 先让我们熟悉下基本的sql语句,来查看下我们将要测试表的基本信息 use infomation_schemaSELECT * FROM TABLES WHERE TABLE_SCHEMA = 'dbna

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能. 方案: 对于较大的数据量,通常采用分页查询的方式.不同的数据库产品有不同的数据库级的分页查询策略.例如:Oracle通常使用rownum的方式:而Mysql使用limit的方式. Oracle采用rownum和子查询实现分页查询,SQL语句如下, select * from (select rownum rn,empno,ename,jo

sql中对查询出来的数据进行分页

当sql中存储的数据量比较大时,在web中 数据显示时都会对数据进行分页,分页不会在客户端进行分页,而是在数据库查询过程中进行了分页. sql代码: DECLARE @pageindex INT; --页码 DECLARE @pagesize INT; --每页显示的记录数量 SET @pageindex=; SET @pagesize=5; SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY UserName) AS rownumber,* FRO

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

支持数据列表分页的帮助类

[WPF]闲着没事,写了个支持数据列表分页的帮助类 支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip 和 Take 扩展方法,从源列表中取出某一段数据.在实例化的时候,需要提供一个 IEnumerable<T> 对象作为参数,本类会根据这个数据源来计算分页,使用参数T使其支持泛型. public PagabledCollection(IEnum

企业级控件库之大数据量分页控件(转)

在上篇:我介绍了原创企业级控件库之组合查询控件,这篇我将给大家介绍:企业级控件库之大数据量分页控件.  摘要  说到分页,大家采用的方法各有千秋,分页在一个中大型软件项目中对数据的快速呈现起到很关键的作用,试想一个数据量上几十万或者几百万的数据表,要是没有分页功能会是一个什么样的效果.总的说来,大家采用的分页方法大同小异,但到底那种方法才是最佳的呢,各有各的看法,让数据说话最有效.今天我给大家分享一个WinForm下大数据量分页控件(当然分页思想也可用于WebForm).虽然不能说是最佳的,但在

ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询

一.说明: JQuery EasyUI下载地址:http://jquery-easyui.wikidot.com/download,最新版本1.2.2. 首先预览一下界面: 本例实现的功能: 1.多标签 2.分页列表显示数据 3.获取选中行的标识值,删除选中行 实现以上功能主要使用了: 1.layout:布局 2.tabs:多标签 3.datagrid:表格显示数据,并可以分页 4.messager:消息框 5.window:窗口 要了解用法,下载之后,参阅demo文件夹下的demo和官方文档.

php -- php读取sqlserver2005的数据实现分页查询

--php5.2 --sqlserver2005 php读取sqlserver多条数据时,有时因为数据太多,需要进行分页查询. 例如,按价格的顺序,读取同一类型的产品的第30到第48条记录 $startNum = 30; $endNum = 48;$type = '洗发水'; 如果php页面的编码是UTF-8,sqlserver是GBK的话, 要将$type进行转码, $type = iconv('UTF-8','GBK',$type); 接下来分页查询(数据表table1,构建临时表a),贴上

jsp:使用jsp完成数据的分页显示

一,使用jsp将数据库内的数据.分页显示到页面 1,创建一个servelt处理后台数据,和数据库的数据 private static final long serUid=1L; //加载驱动 static final String jdbc="com.mysql.jdbc.Driver"; //要连接的数据库url static final String db_url="jdbc:mysql://localhost:3306/test"; //数据库用户名 stat