热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Servlet实现分页效果

这篇文章主要为大家详细介绍了Servlet实现分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Servlet实现分页效果的具体代码,供大家参考,具体内容如下

分页的算法:

需要定义四个变量,它们有各自的用处
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录

说明:

pageSize是指定,pageNow是指用户的选择。
rowCount是从表中查询得到的。
pageCount是计算出来的,该计算公式为:

if(rowCount%pageSize==0) { 
 pageCount=rowCount/pageSize; 
} else { 
 pageCount=rowCount/pageSize+1; 
} 

如果使用语句:select 字段名列表 from 表名 where id between ? and ?
这个sql语句确实比较快,但是存在一个问题,即如果表的id被删除了,那么某页可能就会少一条记录。

因此,最终方法是如下语句:
select top pageSize 字段名列表 from 表名 where id not in(select top pageSize*(pageNow-1) id from 表名)

实现代码为:

import javax.servlet.http.*; 
import java.io.*; 
import java.sql.*; 
public class fenye extends HttpServlet{ 
 public void doGet(HttpServletRequest req,HttpServletResponse res) 
  { 
    Connection ct=null; 
    PreparedStatement ps=null; 
    ResultSet rs=null; 
     
    int pageSize=3; //希望每页显示记录的条数 
       int pageNow=1;  //初始化当前页为第一页 
       int pageCount=0; //总页数,需要通过计算得知 
       int rowCount=0; //记录总数,查表获知 
       String sPageNow=req.getParameter("pageNow"); //接收传递过来的当前页面     
      if(sPageNow!=null) //若接收到非空值,将其转为整数 
       { 
          pageNow=Integer.parseInt(sPageNow); 
      } 
     
 
  try{ 
         PrintWriter pw=res.getWriter(); 
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Students","sa","密码"); 
      ps=ct.prepareStatement("select count(*) from [Students].[dbo].[Students]"); //获取表中记录总数 
      rs=ps.executeQuery(); 
      while(rs.next()) 
      { 
        rowCount=rs.getInt(1); //获取表中记录总数 
      } 
      if(rowCount%pageSize==0)  //计算总页面数 
      { 
        pageCount=rowCount/pageSize; 
      } 
      else 
      { 
        pageCount=rowCount/pageSize+1;  
      } 
     
 ps=ct.prepareStatement("select top "+pageSize+" * from [Students].[dbo].[Students] where id not in(select top "+pageSize*(pageNow-1)+" id from [Students].[dbo].[Students])"); 
     
  
    rs=ps.executeQuery(); 
    pw.println("
"); //将查询结果以表的形式展现 pw.println(""); while(rs.next()) { pw.println(""); pw.println(""); pw.println(""); pw.println(""); pw.println(""); } pw.println("
idnamegrade
"+rs.getInt(1)+""+rs.getString(2)+""+rs.getString(3)+"
"); if(pageNow==1) //前一页超链接,当已经跳转到第一页时,页面不再改变 { pw.println(""+"forward"+""); } else //未跳转到第一页时,每点击一次超链接,页面向前跳转一次 { pw.println(""+"forward"+""); } if(pageCount<=5) //控制显示页数超链接的个数 { for(int i=1;i<=pageCount;i++) { pw.println(""+i+""); } }else if(pageCount-pageNow<=5) { for(int i=pageNow;i<=pageCount;i++) pw.println(""+i+""); }else //当页面数过多时,为了页面美观需要控制显示超链接个数 { for(int i=pageNow;i<=pageNow+5;i++) pw.println(""+i+""); } if(pageNow==pageCount) //已经为最后一页时,点击后一页不再跳转 { pw.println(""+"backward"+""); } else { pw.println(""+"backward"+""); } pw.println("
"); }catch(Exception ex){ ex.printStackTrace(); } } public void doPost(HttpServletRequest req,HttpServletResponse res) { this.doGet(req,res); } }

 执行结果:

当每页显示记录数为3时:

点击相应连接可以成功跳转。

最后一页显示为:

对应代码:

if(pageCount<=5) 
  { 
    for(int i=1;i<=pageCount;i++) 
     { 
    pw.println(""+i+""); 
     } 
  } 

点击backward不再跳转。

为了显示程序控制页数超链接数目的效果如何,将每页显示记录数改为1。

第一页显示效果:

对应代码:

else 
    { 
      for(int i=pageNow;i<=pageNow+5;i++) 
        pw.println(""+i+""); 
    } 

当前页码逐渐增大时的显示效果:

 

对应代码:

 else if(pageCount-pageNow<=5) 
    { 
      for(int i=pageNow;i<=pageCount;i++) 
      pw.println(""+i+""); 
    } 


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何使用Maven高效管理多模块项目,涵盖项目结构设计、依赖管理和构建优化等方面。通过具体的实例和配置说明,帮助开发者更好地理解和应用Maven在复杂项目中的优势。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
author-avatar
老美1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有