`

数据分页显示

阅读更多

1.分页方式

    1.1:数据库分页

           *原理:在数据库中只查询当页需要显示的记录,返回给显示页面。

           *特点:过滤操作的负荷由数据库承担。传输量小。

           *实现方式:定义一个分页的Bean对象(当前页数,记录条数,总页数,每页记录数);根据Bean对象的属性查询记录;

           *

     1.2:代码分页

           *原理:在数据库中查询全部记录,返回给显示页面整理。

           *特点:过滤操作的负荷由动态页面组装的部分承担。传数量大。

           *实现方式:查询所有记录;在动态组装页面时设置分页显示。

2.分页实现代码

   2.1:bean+jsp+sql+servlet

       *Bean

public class PaginationBean {

     /**

      * 当前页数

      */

     private int currentPage;

     /**

      * 每页显示数

      */

     private int eachPage;

     /**

      * 总页数

      */

     private int totalPage;

     /**

      * 数据总数

      */

     private int count;

     public int getCurrentPage() {

            return currentPage;

     }

     public void setCurrentPage(int currentPage) {

            this.currentPage = currentPage;

     }

     public int getEachPage() {

            return eachPage;

     }

     public void setEachPage(int eachPage) {

            this.eachPage = eachPage;

     }

     public int getTotalPage() {

            return totalPage;

     }

     public void setTotalPage(int totalPage) {

            this.totalPage = totalPage;

     }

     public int getCount() {

            return count;

     }

     public void setCount(int count) {

            setTotalPage((int)Math.ceil((double)count/(double)eachPage));

            this.count = count;

     }}

*SQL

import java.util.List;

 

import com.lovo.shop.bean.BookBean;

import com.lovo.shop.bean.PaginationBean;

 

public class BookDAO extends BaseDAO{

     public List findBook(BookBean bean,PaginationBean pb){

            String sql = "select top "+pb.getEachPage()+" * from book" +

                          " where  id not in" +

                          " (select top "+(pb.getCurrentPage()*pb.getEachPage())+" id from book" +

                          " order by id desc)" +

                          " order by id desc";

            return find(sql, BookBean.class);

     }

     public List findBookCount(BookBean bean){

            String sql = "select count(*) count from book";

            return find(sql, PaginationBean.class);

     }

}

import java.util.List;

 

import com.lovo.shop.bean.BookBean;

import com.lovo.shop.bean.PaginationBean;

import com.lovo.shop.dao.BookDAO;

 

public class SelectBookService {

     public List selectBook(BookBean bookBean,PaginationBean pb){

            BookDAO dao = new BookDAO();

            List<PaginationBean> list = dao.findBookCount(bookBean);

            List bookList = null;

            if(list.size() > 0){

                   int count = list.get(0).getCount();

                   pb.setCount(count);

                   bookList = dao.findBook(bookBean, pb);

            }

            return bookList;

     }

}

SERVLET

import java.io.IOException;

import java.util.List;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import com.lovo.shop.bean.BookBean;

import com.lovo.shop.bean.PaginationBean;

import com.lovo.shop.service.SelectBookService;

 

public class BookServlet extends HttpServlet {

 

    

     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("currentPage");

            int page = 0;

            if(currentPage != null){

                   page = Integer.parseInt(currentPage);

            }

           

            PaginationBean pg = new PaginationBean();

            pg.setCurrentPage(page);

            pg.setEachPage(5);

           

            SelectBookService bookService = new SelectBookService();

            List list = bookService.selectBook(new BookBean(), pg);

           

            request.setAttribute("bookList", list);

            request.setAttribute("pb", pg);

            request.getRequestDispatcher("book.jsp").forward(request, response);

     }}

JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

     <head>

 

     </head>

 

     <body>

            <c:forEach items="${bookList}" var="book">

                   <div>

                          ${book.name}

                   </div>

            </c:forEach>

 

            <table>

                   <tr>

                          <td>

                                 <c:if test="${pb.currentPage>0}">

                                        <a href="showBook?currentPage=${pb.currentPage-1 }">上一页</a>

                                 </c:if>

                          </td>

                          <c:forEach begin="0" end="${pb.totalPage - 1}" var="num">

                                 <td>

                                        <a href="showBook?currentPage=${num }">${num+1 }</a>

                                 </td>

                          </c:forEach>

                          <td>

                                 <c:if test="${pb.currentPage<pb.totalPage-1}">

                                        <a href="showBook?currentPage=${pb.currentPage+1 }">下一页</a>

                                 </c:if>

                          </td>

                   </tr>

            </table>

     </body>

</html>

   2.2:rownum——rownum每次必须从1开始分配;rownum在其SQL语句的order by之前就生成。

         *先排序,再产生rownum,再嵌套

         *排序——如果主键与排序字段排序后顺序一致,则可以简化

SELECT * FROM (
--避免行号从1开始计数
  SELECT ROWNUM r,t.* FROM (
  --避免在排序前行号就固定了
   SELECT empno,ename,hiredate FROM emp ORDER BY hiredate DESC
  ) t   
) t
WHERE t.r BETWEEN 4 AND 6

   

2.3:row_number()

 

SELECT * FROM (
  SELECT empno,ename,hiredate,
     row_number() over(ORDER BY hiredate DESC) r--以over里的条件生成行号,并取别名r。
  FROM emp
) t
WHERE t.r BETWEEN 4 AND 6

2.4:存储过程

CREATE OR REPLACE PROCEDURE sp_page(
p_field_list VARCHAR2,
p_field_order VARCHAR2,
p_table VARCHAR2,
p_page_row NUMBER,
p_page_num NUMBER,
resultset OUT Sys_Refcursor
)
AS
  sqlstr VARCHAR2(4000);
  r_start NUMBER;
  r_end NUMBER;
BEGIN
   --分页算法
   r_end:=p_page_row*p_page_num;
   r_start:=(p_page_row-1)*p_page_num+1;
   
   sqlstr:= 'SELECT * FROM ( SELECT '||p_field_list
   ||',row_number() over(ORDER BY '||p_field_order||' ) r FROM '
   ||p_table||') t WHERE t.r BETWEEN :r1 AND :r2';
   
   OPEN resultset FOR sqlstr USING r_start,r_end;
END;

 

--测试(PL/SQL,JDBC)

DECLARE
   rs SYS_REFCURSOR;
   v_empno emp.empno%TYPE;
   v_ename emp.ename%TYPE;
   r NUMBER;
BEGIN
   sp_page('empno,ename','hiredate DESC','emp_big',10,10,rs);
   FETCH rs INTO v_empno,v_ename,r;
   WHILE(rs%FOUND)
   LOOP
     dbms_output.put_line(r||','||v_empno||','||v_ename);
     FETCH rs INTO v_empno,v_ename,r;
   END LOOP;
   CLOSE rs;
END;

--jdbc
		Connection conn = null;
		Class.forName("oracle.jdbc.driver.OracleDriver");
		String url = "jdbc:oracle:thin:@192.168.1.110:1521:orcl";
		conn = DriverManager.getConnection(url, "scott", "tiger");
		String sql = "{CALL sp_page(?,?,?,?,?,?)}";
		CallableStatement call = conn.prepareCall(sql);

		call.setString(1, "empno,ename");
		....
		call.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
		call.executeUpdate();
		
		ResultSet rs = (ResultSet) call.getObject(6);
		ResultSetMetaData rmd = rs.getMetaData();
		while (rs.next()) {
			for (int i = 0; i < rmd.getColumnCount(); i++) {
				System.out.print(rs.getString(i + 1) + " ");
			}
			System.out.println("");
		}
		rs.close();
		call.close();
		conn.close();
	}

  

分享到:
评论

相关推荐

    javascript读取Json数据分页显示

    确保这三个部分协同工作,就可以实现一个完整的、支持键盘和滚轮翻页的JSON数据分页显示功能。 在实际应用中,还需要考虑数据的异步加载、错误处理、分页参数的持久化等复杂情况。但以上内容提供了一个基础的实现...

    java 数据分页显示

    在Java编程中,数据分页显示是Web应用中常见的需求,尤其在处理大量数据时,为了提高用户体验并优化服务器性能,通常需要将数据分成多个页面进行展示。本篇将深入探讨Java实现数据分页显示的核心技术和策略。 首先...

    基于PHP实现数据分页显示功能

    本文将详细介绍如何使用PHP来实现数据分页显示功能。 首先,分页功能的基本原理是在数据库查询时,限制返回的数据量,并为用户提供切换不同页面的链接。在每个页面中,我们只会查询和显示当前页面需要展示的数据。 ...

    JSP连接SQL数据库实现数据分页显示

    ### JSP连接SQL数据库实现数据分页显示 #### 概述 本文档通过一个实际案例展示了如何使用JSP(Java Server Pages)与SQL数据库进行交互,并实现数据的分页显示功能。该示例包含了详细的代码及注释,有助于理解整个...

    C# DataGridView的数据分页显示

    本篇文章将深入探讨如何在C#中的DataGridView实现数据分页显示,并结合SQL数据库进行操作。 首先,理解数据分页的基本概念。数据分页是指将大量数据分为多个较小的部分(页),每次只加载一页数据到视图中,用户...

    jquery实现数据分页显示

    本教程将专注于使用JavaScript库jQuery来实现数据分页显示,涵盖了内存分页和数据库分页两种主要方式。 **一、jQuery分页基础** jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理和动画效果。在实现...

    用JSP进行数据分页显示的一个实现.rar_java 分页_java 分页显示_jsp 显示数据_jsp数据分页_分页显示

    通过以上步骤和代码,我们可以实现一个基本的JSP数据分页显示功能。然而,实际项目中,可能还需要考虑更多细节,如错误处理、安全防护以及性能优化等。此外,现代Web开发中,通常会使用Spring MVC等框架,配合...

    C#城市信息 数据分页显示

    在C#编程环境中,开发一个应用来实现城市信息的数据分页显示是一项常见的任务,尤其是在构建C/S(客户端/服务器)架构的应用程序时。这个功能可以让用户更有效地浏览大量的城市信息,比如中国的城市名称,而无需一次...

    JSP页面数据分页显示文档与示例

    在B/S架构的应用程序中,数据分页是常见的功能,特别是在处理大量数据时,为了提高用户体验,我们需要将数据分成多个页面进行展示。...希望这些信息能帮助你更好地理解和应用JSP页面数据分页显示。

    JSP 数据分页显示(数据库为可携带数据库)

    本文将深入探讨如何使用JSP(Java Server Pages)实现基于可携带数据库的数据分页显示。 首先,我们需要理解什么是可携带数据库。可携带数据库,如HSQLDB、SQLite等,是轻量级、易于部署的数据库系统,可以在没有...

    jsp+servlet+javabean+ajax MVC模式,增删改查,数据分页显示

    在数据分页显示中,`Ajax`可以通过发送请求获取特定页码的数据,提高用户体验,避免了全页面刷新的等待时间。 对于文件和图片的上传,项目采用了`SmartUpload`组件。这是一个强大的文件上传组件,支持多文件选择、...

    实现千万级数据的分页显示

    本文详细介绍了一种用于实现千万级数据分页显示的技术方案。通过对SQL查询的优化、动态生成SQL以及使用存储过程等方式,成功实现了在短时间内高效获取大量数据的功能。该方案不仅适用于当前的需求,也为未来处理更大...

    JSP实现将数据分页显示类

    在这个场景下,我们讨论的是如何使用JSP来实现数据的分页显示。分页是大型Web应用程序中常见的功能,它有助于提高用户体验,避免一次性加载大量数据导致页面响应变慢。下面将详细解释分页的基本思想和实现步骤。 1....

    分页显示大量数据

    在处理大量数据时,cxGrid提供了丰富的特性来支持高效的数据分页显示。 在本案例中,cxGrid被用来作为显示大量数据的主要工具。通过设置合适的参数,cxGrid能够实现在用户滚动时自动加载新数据的功能,而无需用户...

    jsp 实现数据库数据分页显示

    只要通过JDBC连接上数据库 获得Connection 对象 套上此模板就可实现数据库数据分页机制……

    javascript处理数据分页显示

    从给定的文件信息来看,这段代码主要展示了如何在前端使用JavaScript实现数据的分页显示。虽然后台数据库操作部分被省略,但我们可以基于现有代码理解整个分页机制的前端处理逻辑。以下是对该知识点的详细解析: ##...

    Qt数据库分页显示

    本教程将深入探讨如何在Qt应用中实现SQLite数据库的数据分页显示。 首先,我们需要在Qt项目中集成SQLite数据库支持。在Qt Creator中,新建一个Qt Widgets Application项目,然后在.pro文件中添加`QT += sql`来启用...

Global site tag (gtag.js) - Google Analytics