- 浏览: 95269 次
- 性别:
- 来自: 成都
文章分类
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(); }
发表评论
-
hibernate中PO的构造器顺序
2010-12-16 22:01 2702构造器的顺序需要和hql中的顺序一致。否则会出现如下错误: ... -
基础知识的重要
2010-12-16 18:36 1147Exception in thread "main& ... -
小错误引发大问题
2010-12-15 22:03 2026在配置文件中将id的generator值increament写 ... -
表联接
2010-07-04 22:45 8271.多表联接 CREATE TABLE sal(empno ... -
重复记录的处理方法
2010-07-04 22:34 8361.rowid——记录所在的磁盘位置,可以实现快速定位 SE ... -
项目失败与数据库
2010-07-04 22:01 6861。SQL语句对系统的影响 ... -
SQL与PL/SQL的区别
2010-06-21 21:07 1727*在PL/SQL中只可以直接嵌 ... -
跨工具开发PL/SQL脚本
2010-06-21 20:55 8421.SQL下:SQL<——>PL/SQL ... -
数据类型的转换和SQL平台移交
2010-06-17 16:49 8421.java内部的数据类型转换 1.1:简单类 ... -
编码了解
2010-06-17 15:13 7011.编码种类 1.1:GBK(GB2312)——简 ... -
2010.6.10——javascript
2010-06-11 00:47 448在什么地方应用JavaScript ...
相关推荐
确保这三个部分协同工作,就可以实现一个完整的、支持键盘和滚轮翻页的JSON数据分页显示功能。 在实际应用中,还需要考虑数据的异步加载、错误处理、分页参数的持久化等复杂情况。但以上内容提供了一个基础的实现...
在Java编程中,数据分页显示是Web应用中常见的需求,尤其在处理大量数据时,为了提高用户体验并优化服务器性能,通常需要将数据分成多个页面进行展示。本篇将深入探讨Java实现数据分页显示的核心技术和策略。 首先...
本文将详细介绍如何使用PHP来实现数据分页显示功能。 首先,分页功能的基本原理是在数据库查询时,限制返回的数据量,并为用户提供切换不同页面的链接。在每个页面中,我们只会查询和显示当前页面需要展示的数据。 ...
### JSP连接SQL数据库实现数据分页显示 #### 概述 本文档通过一个实际案例展示了如何使用JSP(Java Server Pages)与SQL数据库进行交互,并实现数据的分页显示功能。该示例包含了详细的代码及注释,有助于理解整个...
本篇文章将深入探讨如何在C#中的DataGridView实现数据分页显示,并结合SQL数据库进行操作。 首先,理解数据分页的基本概念。数据分页是指将大量数据分为多个较小的部分(页),每次只加载一页数据到视图中,用户...
本教程将专注于使用JavaScript库jQuery来实现数据分页显示,涵盖了内存分页和数据库分页两种主要方式。 **一、jQuery分页基础** jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理和动画效果。在实现...
通过以上步骤和代码,我们可以实现一个基本的JSP数据分页显示功能。然而,实际项目中,可能还需要考虑更多细节,如错误处理、安全防护以及性能优化等。此外,现代Web开发中,通常会使用Spring MVC等框架,配合...
在C#编程环境中,开发一个应用来实现城市信息的数据分页显示是一项常见的任务,尤其是在构建C/S(客户端/服务器)架构的应用程序时。这个功能可以让用户更有效地浏览大量的城市信息,比如中国的城市名称,而无需一次...
在B/S架构的应用程序中,数据分页是常见的功能,特别是在处理大量数据时,为了提高用户体验,我们需要将数据分成多个页面进行展示。...希望这些信息能帮助你更好地理解和应用JSP页面数据分页显示。
本文将深入探讨如何使用JSP(Java Server Pages)实现基于可携带数据库的数据分页显示。 首先,我们需要理解什么是可携带数据库。可携带数据库,如HSQLDB、SQLite等,是轻量级、易于部署的数据库系统,可以在没有...
在数据分页显示中,`Ajax`可以通过发送请求获取特定页码的数据,提高用户体验,避免了全页面刷新的等待时间。 对于文件和图片的上传,项目采用了`SmartUpload`组件。这是一个强大的文件上传组件,支持多文件选择、...
本文详细介绍了一种用于实现千万级数据分页显示的技术方案。通过对SQL查询的优化、动态生成SQL以及使用存储过程等方式,成功实现了在短时间内高效获取大量数据的功能。该方案不仅适用于当前的需求,也为未来处理更大...
在这个场景下,我们讨论的是如何使用JSP来实现数据的分页显示。分页是大型Web应用程序中常见的功能,它有助于提高用户体验,避免一次性加载大量数据导致页面响应变慢。下面将详细解释分页的基本思想和实现步骤。 1....
在处理大量数据时,cxGrid提供了丰富的特性来支持高效的数据分页显示。 在本案例中,cxGrid被用来作为显示大量数据的主要工具。通过设置合适的参数,cxGrid能够实现在用户滚动时自动加载新数据的功能,而无需用户...
只要通过JDBC连接上数据库 获得Connection 对象 套上此模板就可实现数据库数据分页机制……
从给定的文件信息来看,这段代码主要展示了如何在前端使用JavaScript实现数据的分页显示。虽然后台数据库操作部分被省略,但我们可以基于现有代码理解整个分页机制的前端处理逻辑。以下是对该知识点的详细解析: ##...
本教程将深入探讨如何在Qt应用中实现SQLite数据库的数据分页显示。 首先,我们需要在Qt项目中集成SQLite数据库支持。在Qt Creator中,新建一个Qt Widgets Application项目,然后在.pro文件中添加`QT += sql`来启用...