一、可滚动结果集

Connection con  = DriverManager.getConnection();

PreparedStatement stmt = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);

ResultSet rs = stmt.executeQuery();

常用方法:

(1)rs.absolute(n);        可以将指针跳到第n行。

(2)rs.relative(n);           可以将指针相对向下或向上n行。

(3)rs.first();

(4)rs.last();

(5)int curRow = rs.getRow();    指针指向的当前行

 

二、功能实现分解

思路是,如果要显示那个页面,就要先算出来每个页面第一条记录是所有记录中的第几条记录,假设每页的第一条记录是总记录中的第position条记录,那么position=(ShowPage - 1)×PageSize+1。比如上图这个例子,如果要显示第一页,就要计算出第一页中的第一条记录是总的记录中的第一条记录;如果要显示第二页,就要计算出第二页中的第一条记录是总的记录中的第四条记录;如果要显示第三页,就要计算出第一页中的第一条记录是总的记录中的第九条记录。

1.计算结果的个数

rs.last();

int size = rs.getRow();

即可得到结果的个数。

2.得到需要分几页

如果一页能够放5条记录,则

int pageCount = (size%5==0)?(size/5):(size/5+1);

即可获得需要分几页。

3.控制一页中规定显示记录个数

如果一页能显示5条记录,可以通过使用count进行计数。

int count = 0;

do{

if(count>=5) break;

.....

count++;

}while(rs.next());

通过break语句,能够使其显示到超过规定条目就跳出。

4.如何知道当前是第几页

通过HTTP get的特点,在地址栏中标明当前地址,如http://.......?curPage=1    表示现在是第一页。

String tmp = request.getParameter("curPage");
if(tmp==null){
       tmp="1";
}
curPage = Integer.parseInt(tmp);

可以获得当前页。

注意:

rs.absolute(1);表示指向第一条记录;

不存在rs.absolute(0);

rs.absolute((curPage-1)*PAGESIZE+1);      把结果集指针调整到当前页应该显示的记录的开始.

比如如果一页显示5条记录,当前页是第二页,则需要把指针调整到6,当前页是第三页,则需要把指针调整为11.

5.点击首页、上一页、下一页、尾页的行为

<a href="multipage.jsp?curPage=<%curPage+1%>" >下一页</a>

<a href="multipage.jsp?curPage=<%curPage-1%>" >上一页</a>

<a href="multipage.jsp?curPage=<%pageCount%>" >尾页</a>

<a href="multipage.jsp?curPage=1" >首页</a>

6.为了保存当前页位置,则需要把当前页位置设为全局变量。

综合代码:
[html] view plaincopy
  1. <%@ page contentType="text/html" pageEncoding="GB2312" language="java"%>
  2. <%@ page import="java.sql.*"%>
  3. <html>
  4. <head>
  5. <title>hello</title>
  6. </head>
  7. <body>
  8. <table border="1" spacing="2">
  9. <%!
  10. public static final String DRIVER = "com.mysql.jdbc.Driver";
  11. public static final String USER = "root";
  12. public static final String PASS = "12345";
  13. public static final String URL = "jdbc:mysql://localhost:3306/MLDN";
  14. public static final int PAGESIZE = 5;
  15. int pageCount;
  16. int curPage = 1;
  17. %>
  18. <%
  19. //一页放5个
  20. String user = null;
  21. String pass = null;
  22. try{
  23. Class.forName(DRIVER);
  24. Connection con = DriverManager.getConnection(URL,USER,PASS);
  25. String sql = "SELECT empno,ename,job,hiredate,sal,comm FROM emp";
  26. PreparedStatement stat = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
  27. ResultSet rs = stat.executeQuery();
  28. rs.last();
  29. int size = rs.getRow();
  30. pageCount = (size%PAGESIZE==0)?(size/PAGESIZE):(size/PAGESIZE+1);
  31. String tmp = request.getParameter("curPage");
  32. if(tmp==null){
  33. tmp="1";
  34. }
  35. curPage = Integer.parseInt(tmp);
  36. if(curPage>=pageCount) curPage = pageCount;
  37. boolean flag = rs.absolute((curPage-1)*PAGESIZE+1);
  38. out.println(curPage);
  39. int count = 0;
  40. do{
  41. if(count>=PAGESIZE)break;
  42. int empno = rs.getInt(1);
  43. String ename = rs.getString(2);
  44. String job = rs.getString(3);
  45. Date hiredate = rs.getDate(4);
  46. float sal = rs.getFloat(5);
  47. int comm = rs.getInt(6);
  48. count++;
  49. %>
  50. <tr>
  51. <td><%=empno%></td>
  52. <td><%=ename%></td>
  53. <td><%=job%></td>
  54. <td><%=hiredate%></td>
  55. <td><%=sal%></td>
  56. <td><%=comm%></td>
  57. </tr>
  58. <%
  59. }while(rs.next());
  60. con.close();
  61. }
  62. catch(Exception e){
  63. }
  64. %>
  65. </table>
  66. <a href = "multipage.jsp?curPage=1" >首页</a>
  67. <a href = "multipage.jsp?curPage=<%=curPage-1%>" >上一页</a>
  68. <a href = "multipage.jsp?curPage=<%=curPage+1%>" >下一页</a>
  69. <a href = "multipage.jsp?curPage=<%=pageCount%>" >尾页</a>
  70. 第<%=curPage%>页/共<%=pageCount%>页
  71. </body>
  72. </html>

思路是,如果要显示那个页面,就要先算出来每个页面第一条记录是所有记录中的第几条记录,假设每页的第一条记录是总记录中的第position条记录,那么position=(ShowPage - 1)×PageSize+1。比如上图这个例子,如果要显示第一页,就要计算出第一页中的第一条记录是总的记录中的第一条记录;如果要显示第二页,就要计算出第二页中的第一条记录是总的记录中的第四条记录;如果要显示第三页,就要计算出第一页中的第一条记录是总的记录中的第九条记录。
       在JSP中的核心代码为如下(用的数据库为MySQL):

复制代码 代码如下:

<%!  int pageSize=4;
 int pageCount;
 int showPage;
 %>

<!-- 连接数据库并从数据库中调取记录-->
<%
 Connection con;
 Statement sql;
 ResultSet rs;

try{Class.forName("com.mysql.jdbc.Driver");
 }catch(ClassNotFoundException e){
 }

try{con=DriverManager.getConnection("jdbc:mysql://localhost:3306/message board","root","123456");
  sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  //返回可滚动的结果集
  rs=sql.executeQuery("select * from messageinfo");
  //将游标移到最后一行
  rs.last();
  //获取最后一行的行号
  int recordCount=rs.getRow();
  //计算分页后的总数
  pageCount=(recordCount%pageSize==0)?(lastRow/pageSize):(lastRow/pageSize+1);

//获取用户想要显示的页数:
  String integer=request.getParameter("showPage");
  if(integer==null){
   integer="1";
  }
  try{showPage=Integer.parseInt(integer);
  }catch(NumberFormatException e){
   showPage=1;
  }
  if(showPage<=1){
   showPage=1;
  }
  if(showPage>=pageCount){
   showPage=pageCount;
  }

//如果要显示第showPage页,那么游标应该移动到的position的值是:
  int position=(showPage-1)*pageSize+1;
  //设置游标的位置
  rs.absolute(position);
  //用for循环显示本页中应显示的的记录
  for(int i=1;i<=pageSize;i++){  
 %>
   <table>
    <tr>
     <th><%=rs.getString("UserName") %></th>
     <td>发表于:<%=rs.getString("datetime") %></td>
    </tr>
    <tr >
     <th colspan="3"><textarea><%=rs.getString("content") %></textarea></th>
    </tr>
   </table>

<%  
   rs.next();
  } 
  rs.close();
  con.close();
  }
  catch(Exception e){
  e.printStackTrace();}
 %>
 <br>
 第<%=showPage %>页(共<%=pageCount %>页)
 <br>
 <a href="ShowMessages.jsp?showPage=1">首页</a>
 <a href="ShowMessages.jsp?showPage=<%=showPage-1%>">上一页</a>
<% //根据pageCount的值显示每一页的数字并附加上相应的超链接
  for(int i=1;i<=pageCount;i++){
 %>
   <a href="ShowMessages.jsp?showPage=<%=i%>"><%=i%></a>
<% }
 %> 
 <a href="ShowMessages.jsp?showPage=<%=showPage+1%>">下一页</a>
 <a href="ShowMessages.jsp?showPage=<%=pageCount%>">末页</a>
 <!-- 通过表单提交用户想要显示的页数 -->
 <form action="" method="get">
  跳转到第<input type="text" name="showPage" size="4">页
  <input type="submit" name="submit" value="跳转">
 </form>

运行结果如下(为了简化代码,已经网页布局相关代码去掉,此处仅指功能):

转载于:https://www.cnblogs.com/zhouxiansheng/p/4355708.html

JSP分页技术的实现(利用当前页进行前后加减,并利用href进行当前页面传值,传值当然是那个当前值变量)...相关推荐

  1. jsp分页技术用oracle实现,Oracle Rownum的使用与JSP分页显示的实现

    Oracle Rownum的使用与JSP分页显示的实现 徐越人 [期刊名称]<计算机与现代化> [年(卷),期]2007(000)010 [摘要]首先对Oracle的Rownum使用的诸多 ...

  2. mysql jsp分页技术_一个非常简单的分页技术MYSQL JSP 利用了mysql的LIMIT参数

    一个非常简单的分页技术MYSQL JSP 利用了mysql的LIMIT参数 优点:1自己想出来的 2利用了MYSQL 数据库的本身 LIMIT 缺点:现在仅仅实现了 下一个页面功能 <% int ...

  3. mysql jsp分页技术_一个非常简单的分页技术MYSQL+JSP 利用了mysql的LIMIT参数

    一个非常简单的分页技术MySQL(和PHP搭配之最佳组合)+jsp(SUN企业级应用的首选) 利用了MySQL(和PHP搭配之最佳组合)的LIMIT参数 优点:1自己想出来的 2利用了MySQL(和P ...

  4. jsp分页技术的实现

    这是我们所要的效果 但是怎么用代码实现呢,那摩让我们先来分析一下吧! 第一步分析我们做分页需要什么数据: 我们从两个方向来分析:1 页面方向,2 servlet方向 一 ,页面方向 1 当前页 cur ...

  5. jsp使用mysql技术分页_JSP分页技术实现

    你好,记得你在JavaResearchOrganization上发过的帖子:"JSP分页技术实现"吗? 我看过后觉得很不错,决定采用你的方法了.首先注明的是我是新手,希望一些很低级 ...

  6. 利用自定义分页技术提高数据库性能

    利用自定义分页技术提高数据库性能 孟宪会 2002-11-11 14:28:17 Web应用程序是显示数据库中数据的一个非常好的方法,通过它,你可以把业务复杂,并有访问和安全规则的数据库数据以一种简单 ...

  7. 使用JSP/Servlet技术开发新闻发布系统

               第一章:动态网页开发基础  动态网页:是指在 服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容 动态网页需要使用服务器端的脚本语言,例如 ...

  8. 数据库分页技术的实现及高效率分页技术方案

    当浏览的数据量较大时,分页显示是个非常实用的方法.本文主要介绍了不同数据库中分页技术的实现以及能够提高效率的分页技术的三个方案,希望能够对您有所帮助. 数据库分页技术能够帮助浏览者更好的查看信息,不同 ...

  9. JDBC 学习笔记(一)—— 基础知识 + 分页技术

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

最新文章

  1. java培训有哪些收费标准
  2. 机械制造与自动化专业学习单片机容易吗?如何学习单片机?
  3. 计算机视觉 | 优秀实用的OpenCV开源项目汇总
  4. AI吉尼斯:那些你不知道的人工智能之“最”
  5. swift处理网络返回数据(封装)
  6. Maven入门详解以及Eclisp的集成
  7. 计算机磁盘分为硬盘和什么,fat32是什么?
  8. VScode中SVN插件详细配置【官网】
  9. Aspenone.hysys.V7.1多国语言包(含中文)
  10. Thinkpad SL400开机屏幕亮度问题解决了
  11. ArcGIS遇到严重的应用程序错误的解决办法
  12. 计算机英语趣味知识竞赛题库,2019年小学四年级英语趣味知识竞赛试题
  13. 黑色幽默(Black humor)
  14. 【一文学会】vue.js入门到放弃
  15. 虚拟机booting from hard disk_一分钟带您快速了解虚拟机软件
  16. Bzoj3441 乌鸦喝水
  17. 外卖系统外卖O2O系统开发功能与开发难点介绍
  18. 决策树原理和案例应用-泰坦尼克号生存预测
  19. oracle数据库备份恢复后乱码,RMAN做数据文件恢复后,查询表中数据出现乱码
  20. java设计一个bank类实现银行_java定义一个类实现银行账户的概念。

热门文章

  1. 向DataGridView中添加新的一行数据,可以添加到最后一行或作为第一行
  2. undefined reference to
  3. javascript学习系列(16):数组中的every方法
  4. 前端学习(3067):vue+element今日头条管理-频道筛选完成
  5. 前端学习(2874):原生js模块化+canvas绘制弹幕
  6. [css] 如何设置背景图片不随着文本内容的滚动而滚动?
  7. 前端学习(2737):重读vue电商网站47之生成打包报告
  8. 前端学习(2214):认识react(1)
  9. 前端学习(2201):mutation提交风格
  10. 前端学习(1913)vue之电商管理系统电商系统之创建user分支并把代码推到码云