`
xiaoban0514
  • 浏览: 16609 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

真分页查询

阅读更多

前段时间在javaeye上看到一位朋友 http://qxmcool.iteye.com/blog/333024  写的分页,感觉蛮好的就拿过来学习了,我在事例数据库中存有W条数据,结果玩完了,没想到这个哥们和我开了个玩笑,这原来是个假分页,所谓假分页就是他讲所有的数据放在容器中,每次都得将表中的数据全都查询出来,结果可想而知。在他原有的基础上我将其代码加以改进。以达到真分页的效果。

 

package com.pms.util;

import java.util.List;

/**
 * Pagination.java
 * utils class
 * @author fanfq 2009-6-7
 * 
 * */
public class Pagination<T> {//这里我使用的范型
	
	private int currentPage = 1; // 当前页数
	private int pageCount = 20; // 每页数据的条数
	private int pageSize; // 总页数
	private int valueCount; // 总数据的条数
	private List<T> pageList;// 分页集合
	private int previousPageCount;// 上一页的页数
	private int nextPagecount; // 下一页的页数
	
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
		// 上一页
		previousPageCount = currentPage - 1;
		// 下一页
		nextPagecount = currentPage + 1;
	}
	
	public void setPageList(List<T> pageList) {
		this.pageList = pageList;
		pageSize = valueCount % pageCount == 0 ? valueCount / pageCount
				: valueCount / pageCount + 1;
	}	
	
	public int getCurrentPage() {
		return currentPage;
	}
	
	public int getPageCount() {
		return pageCount;
	}
	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getValueCount() {
		return valueCount;
	}
	public void setValueCount(int valueCount) {
		this.valueCount = valueCount;
	}
	public List<T> getPageList() {
		return pageList;
	}
	
	public int getPreviousPageCount() {
		return previousPageCount;
	}
	public void setPreviousPageCount(int previousPageCount) {
		this.previousPageCount = previousPageCount;
	}
	public int getNextPagecount() {
		return nextPagecount;
	}
	public void setNextPagecount(int nextPagecount) {
		this.nextPagecount = nextPagecount;
	}
	
	

}

 

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
				
		
		//分页查询操作
		String currentpage = request.getParameter("pageindex"); 
		if(currentpage == null){ 
			currentpage = "1"; 
		} 
		int pageindex = Integer.parseInt(currentpage); 
		Pagination<Dept> pc =  new Pagination<Dept>(); //这里我使用的范型
		int count = pc.getPageCount();
		int cursor = count * (pageindex-1);
		pc.setValueCount(new DeptDao().getDeptCount());
		List<Dept> allList = new DeptDao().getAllDeptByPagenation(cursor,count);//关键之处定位查询
		pc.setValueCount(new DeptDao().getDeptCount());
		pc.setPageList(allList); 
		pc.setCurrentPage(pageindex); 
		request.setAttribute("pc", pc);
		this.getServletContext().getRequestDispatcher("/page/xx_list.jsp").forward(request, response); 
		
	}

 

	/**定位查询*/
	public List<Dept> getAllDeptByPagenation(int cursor,int rows) {
		String sql = "SELECT * FROM dept limit " + cursor + "," + rows;
		ResultSet rs = DBPool.exeQuery(sql);
		List<Dept> list = new ArrayList<Dept>();
		try {
			while (rs.next()) {
				Dept fDept = new Dept();
				fDept.setDeptid(rs.getInt(1));
				fDept.setDeptname(rs.getString(2));
				fDept.setDeptbesc(rs.getString(3));
				fDept.setDeptmanager(rs.getInt(4));
				list.add(fDept);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBPool.closeConnection();
		return list;
	}
	
	/**获得部门数*/
	public int getDeptCount(){
		String sql = "select count(*) from dept";
		ResultSet rs = DBPool.exeQuery(sql);
		int count = 0 ;
		try {
			if(rs.next()){
				count = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBPool.closeConnection();
		return count;
	}

   

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  <body>
    <div class="title">
	<h1>所有部门信息</h1>
	<table><tr><td>
		相关操作:
	</td></tr></table>
	</div>
	
<table>
  <thead>
    <th width="10%">部门编号</th>
    <th width="20%">部门名称</th>
    <th width="20%">部门概述</th>
    <th width="20%">部门经理</th>
    <th width="10%">操作</th>
  </thead>
  
  <c:forEach var="pc" items="${pc.pageList}">

	
	
	<tr class="a1" align="center" onmousemove="color=this.style.backgroundColor;this.style.backgroundColor='rgb(214,229,249)'" style="width: 529px" onmouseout="this.style.backgroundColor='white'">	  	
	 <td>${pc.deptid}</td>
	 <td>${pc.deptname}</td>
	 <td>${pc.deptbesc}</td>
	 <td><a href="#" target="">${pc.deptmanager}</a></td>
	 <td><a target="" onClick="Myopen(User,${pc.deptid})">修改</a></td>
	</tr>
	
	  
  </c:forEach>

</table>

<div class="title">
	
	<table><tr align="right"><td>
		第${pc.currentPage}/${pc.pageSize}页&nbsp;&nbsp;
		<a href="DeptServlet?pageindex=1">首页</a> 
		<c:if test="${pc.previousPageCount > 0}" var="true"> 
		<a href="DeptServlet?pageindex=${pc.previousPageCount}">上一页</a> 
		</c:if> 
		<c:if test="${pc.nextPagecount <= pc.pageSize}" var="true"> 
		<a href="DeptServlet?pageindex=${pc.nextPagecount}">下一页</a> 
		</c:if> 
		<a href="DeptServlet?pageindex=${pc.pageSize}">尾页</a> 
	</td></tr></table>
	<h1>**fanfq.iteye.com**</h1>
</div>

</body>

 

 

分享到:
评论
1 楼 jzh2537 2011-07-02  
粘贴复制,整出来了,我自己再慢慢看下代码,学学原理。

相关推荐

    SQLite 查询所有 分页查询 查询个数

    在处理大量数据时,为了提高效率并避免一次性加载所有数据导致性能下降,通常会采用分页查询的方式来获取数据。下面我们将详细探讨SQLite中的查询所有、分页查询以及查询个数的相关知识点。 1. 查询所有数据: 在...

    hbase分页查询实现.pdf

    HBase分页查询实现 HBase作为一个NoSQL数据库,具有高性能、高可扩展性和高可靠性等特点,但是在查询方面却存在一些限制,例如不支持分页查询。这就使得开发者需要自己实现分页查询功能。本文将讲解如何使用Java...

    JDBC轻量级封装(包含数据库真分页查询),好用

    对JDBC的封装,适合多种数据库,使用简单方便。...包含对oracle,mysql,sqlserver等数据库的分页查询实现,之前传的没有simple,这次加上了 (欢迎下载我的最新改良版本:http://download.csdn.net/source/1644852)

    Android开发之数据库的分页查询代码

    在Android应用开发中,数据库是数据存储的重要方式,特别是在处理大量数据时,为了提高用户体验,分页查询就显得尤为重要。本篇文章将详细讲解如何在Android中实现数据库的分页查询功能,以高效、流畅地加载和展示...

    基于springmvc实现分页查询

    本篇文章将详细探讨如何基于Spring MVC实现分页查询,这对于任何处理大量数据的Web应用都是至关重要的。 首先,理解分页的基本概念。分页是将大型数据集划分为较小、更易管理的部分,以提高用户体验并减少服务器...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    在开始解决分页查询问题之前,我们先来了解一下MyBatis Plus的基本概念。MyBatis Plus的核心组件之一是PaginationInterceptor,这是一个分页拦截器,它负责在执行SQL时自动添加分页条件。在不启用这个拦截器的情况下...

    JPA分页查询与条件分页查询

    在这个场景中,我们将探讨如何使用JPA进行分页查询以及带有条件的分页查询。 首先,为了使用Spring Data JPA,我们需要在项目中引入相应的依赖。在Maven的pom.xml文件中,你需要添加`spring-boot-starter-data-jpa`...

    oracle分页查询sql

    ### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...

    winform高效率的分页查询

    本话题聚焦于“winform高效率的分页查询”,我们将探讨如何在VS2013环境下,结合SQL Server 2008数据库,实现高效的数据分页加载到`DataGridView`中。 首先,理解分页查询的原理至关重要。在大数据量的情况下,一次...

    oracle的分页查询

    Oracle 的分页查询 在 Oracle 中,分页查询是非常常见的需求,但是在使用查询条件时又不能使用大于号(&gt;)。本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一...

    JPA复杂查询加分页查询的快速开发

    JPA复杂查询加分页查询的快速开发 JPA(Java Persistence API)是 Java 的持久层 API,用于访问、持久化数据。使用 JPA,可以快速开发复杂查询,实现高效的数据访问。下面是 JPA 复杂查询加分页查询的快速开发知识...

    JavaWeb实现分页查询案例

    在JavaWeb开发中,分页查询是一个非常常见的需求,它能有效地提高网页加载速度,提升用户体验。本案例通过原生的PageBean实现分页查询,采用JDBC(Java Database Connectivity)进行数据库操作,Servlet作为控制层...

    实现分页查询(上)

    在网页开发中,分页查询是一项非常重要的技术,它能够帮助用户有条不紊地浏览大量数据,提高用户体验,同时也减轻了服务器一次性处理过多数据的压力。本篇文章将深入探讨分页查询的概念、实现原理以及常见方法,以...

    oracle分页查询并返回总记录数据存储过程

    ### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...

    大数据量多线程执行分页查询

    多线程技术与分页查询相结合,可以有效地解决这一问题,提高系统性能并优化用户体验。以下是对标题和描述中涉及知识点的详细解释: 1. **大数据量处理**:当数据库中的数据达到百万甚至亿级时,单线程查询可能导致...

    JDBC分页查询(MySQL的)

    jdbc分页查询,利用mysql的limit实现分页查询。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    hbase查询分页分页

    本文将详细探讨HBase中的分页查询机制及其应用。 首先,理解HBase的基本结构至关重要。HBase是基于Google的Bigtable设计的,它以行键(Row Key)为主键进行数据存储,数据按照行键排序。表被分割成多个Region,每个...

    数据库分页查询语句

    ### 数据库分页查询语句 #### 概述 在处理大量数据时,为了提高用户体验并减轻服务器压力,我们通常采用分页的方式展示数据。不同的数据库管理系统(DBMS)提供了各自的方法来实现分页功能。本文将详细介绍Oracle...

Global site tag (gtag.js) - Google Analytics