首页 > 编程语言 >【Java基础】JSP分页显示

【Java基础】JSP分页显示

时间:2022-12-02 21:03:43浏览次数:48  
标签:Java 分页 记录 查询 JSP SQL 中间层 ROWNUM


分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间每页显示若干行,比如一般20行是一个比较理想的显示状态。
分页技术的实现
目前分页技术实现有很多种,一种是将所有查询结果都保存在Session对象中,翻页的时候从Session对象中取出一页所需显示的数据并显示。这种做法有两个缺点:一是用户看到的可能是过期的数据,二是如果数据量非常大,获取结果集的时间会很长,而且这个结果集也会保存在内存中,占用大量的内存空间。
现在流行的分页做法是在每次翻页时,只从数据库里获取出本页所需的数据。这样虽然每次翻页都需要查询数据库,对数据库的查询次数增多了,但是查询出来的结果集比较小,网络传输量低,用户能很快的看到查询结果,在配以数据库连接池技术,效率会有很大的提高。下面是以Oracle作为后台数据库,介绍实现如何分页显示数据。另外提醒大家,不同的数据库厂商支持分页技术时所使用的SQL语句也不一样,Oracle使用ROWNUM关键字,MySQL使用Limit关键字,而SQL Server使用TOP关键字
下面将使用ROWNUM关键字编写实现分页的SQL语句,具体的SQL语句如下所示:

SELET employee_id, last_name,hire_date FROM(
SELECT ROWNUM AS m,t * FORM(
SELECT*FROM emplyees ORDER BY hire_date desc
) t WHERE ROWNUM <= 20
)WHERE M >10

分析该SQL语句,由里到外,它是由三层查询组成的,具体分析如下:

  • 最内层查询—进行排序等限制
    分解出最内层的查询语法如下:
SELECT*FROM employees ORDER BY hire_date desc

执行结果是将雇员信息表中的所有复原按雇佣日期降序排列

  • 中间层查询—-设置最大记录数
    在最内层查询的基础上,分解出中间层查询语句如下:
SELECT ROWNUM AS M,T.*FROM(最内层查询结果) t WHERE ROWNUM <=20

从中间层查询开始使用ROWNUM关键字进行分页处理,这天语句实在最内层查询结果的基础上,按照ROWNUM 行数的顺序取出前20条记录,实际上中间层的查询是为了设置查询结果的最大记录数,注意,中间层查询需要查询出ROWNUM伪列并设置别名(m),这是为了在最外层查询时使用。

  • 最外层查询—-设置最小记录数
    -中间层查询设置了最大记录数,最外层查询就要设置最小记录数,分解出来的最外层查询SQL语句如下:
SELECT employee_id,last_name,hire_date FROM(中间层查询结果) WHERE M >10

在最外层查询中,通过对中间层查询结果中别名为m的字段的限制,设置了最小记录数。整个SQL语句的目的是查询出按雇佣日期倒序排列的第11行到20行的数据。

  • 参数化最大记录数和最小记录数
    假设分页要求是每页显示20条记录,则第一页最小纪录是1,最大记录是20,第二页最小纪录是21,最大记录数是40,如果将每页显示的记录数用pageSize表示,当前页用pageIndex表示,则当前页数的最大记录数用pageSize*(pageIndex-1)+1,最大记录数为pageSize*pageIndex。

实现分页显示

  1. 确定每页显示记录数—–pageSize
  2. 计算总页数—–totalPages
  3. 获取当前页数
  4. 执行分页查询SQL语句,获取结果集,并显示信息
  5. 完成分页导航链接


标签:Java,分页,记录,查询,JSP,SQL,中间层,ROWNUM
From: https://blog.51cto.com/linmengmeng/5907459

相关文章

  • Caused by: java.lang.NullPointerException at org.springframework.beans.factor
    在搭建完Spring环境之后运行第一个demo的时候就碰到这个问题,折腾了一天了,到现在才解决,记录一下自己的失误。解决办法就是在添加userLibrary的时候不能勾选SystemLibra......
  • Java编码小技巧
    你在写一个方法的时候,例如传入两个数组,而你要写的方法代码块又恰好有一种判断方式会导致你要写两个相同代码块,你就可以自己调用自己,并把传参顺序换一下publicint......
  • eclipse中编写Java程序出现Resource leak: 'input' is never closed解决方法
     菜鸟新手,在​​Java​​的简单程序编写过程中,如上代码出现了小小的提示,这种简短的小程序,不关闭也可以运行出正确的结果,由于强迫症,对于这点小毛病也是不能容忍的,再查了百......
  • 【Java基础】setter与getter方法
    没看懂为什么要用这两个方法,先记着吧。在知乎上别人贴上的两个地址,留着以后写的多了,见识的多了,再次回头看这些的时候作为参考吧​​​https://stackoverflow.com/questions......
  • JAVA网络爬虫
    一、前置背景1、URL定义   统一资源标识符(UniformResourceIdentifier,URL)是采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。Java......
  • java语言——跨平台原理,jre,jdk
    day1Java是一种混合的编译运行方式:编译+解释(虚拟机)java的跨平台:在虚拟机中运行(jvm)jdk:jvm,核心类库,开发工具(开发环境)jre:Java的运行环境 ......
  • 【JAVA】基于SpringSecurity登录的详细教程
    不知道抽起哪根筋,花了一周的时间终于写了个基于springsecurity的登录的样例,4、5年前在学springboot时曾经按书上的例子却怎么也写不出来,算是了却自己的一桩心愿吧。当然,我不......
  • java常见的延迟队列实现方式
    参考如下:https://www.jianshu.com/p/977466020144/redission延迟队列的实现https://www.cnblogs.com/better-farther-world2099/articles/15216447.html......
  • Java常用类-Objec和Objects
    Java常用类之Object类基本介绍包地址:java.lang.ObjectClassObject是类Object结构的根。每个class都有Object作为超类。所有对象(包括数组)都继承这个类。构造方法pub......
  • java copyFile
     javacopyFile publicstaticvoidcopyFile(FileoldFile,FilenewFile)throwsIOException{FileInputStreamfis=newFileInputStream(oldFile);Fil......