一、可滚动结果集

 

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.为了保存当前页位置,则需要把当前页位置设为全局变量。

 
综合代码:
  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> 

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

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

  1. jsp分页技术

    1.以下为分页类: import java.io.Serializable;  import java.util.List;    import org.apache.commons.lang.bui ...

  2. 眼下最好的JSP分页技术

     2005-08-24   来源:CSDN  作者:wanchao2001 前言     在使用数据库的过程中,不可避免的须要使用到分页的功能,但是JDBC的规范对此却没有非常好的解决.对于这个需求非 ...

  3. 关于Ajax无刷新分页技术的一些研究 c#

    关于Ajax无刷新分页技术的一些研究 c# 小弟新手,求大神有更好的解决方案,指教下~ 以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能, ...

  4. jsp-------------之分页技术(一)

    jsp分页技术之: 如下图:百度的喵 看上图中卡哇伊的小苗的爪子下面的数字,就是分页啦!那我们如何做出这样一个效果呢? 下面我们来逐一分解: jsp分页技术一 :  (算法) /* int pageS ...

  5. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  6. 利用JFreeChart生成时序图(6) (转自 JSP开发技术大全)

    利用JFreeChart生成时序图(6) (转自 JSP开发技术大全) 14.6 利用JFreeChart生成时序图 通过JFreeChart插件只能生成普通效果的时序图,利用工厂类ChartFact ...

  7. 利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全)

    利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全) 14.5 利用JFreeChart生成区域图 通过JFreeChart插件只能生成普通效果的区域图,利用工厂类ChartFac ...

  8. 利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)

    利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全) 14.4 利用JFreeChart生成折线图 通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折 ...

  9. 利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)

    利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全) 14.8 利用JFreeChart生成组合图表  实例位置:光盘\mingrisoft\14\dxyy\02 通过JFree ...

随机推荐

  1. python day-3 基本数据类型

    1. 编码 1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符!@#$% 128个码位 2**7 在此基础上加了一位 2**8 8位 ...

  2. Maven 用法

    scope标签 provided:如果存在编译需要而发布不需要的jar包,使用provided属性值

  3. strong and weak 强引用和弱引用的差别

    (weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它. 一旦最后一个strong型指针离去 .这个对象将被释放,全部剩余 ...

  4. download file by python in google colab

    https://stackoverflow.com/questions/15352668/download-and-decompress-gzipped-file-in-memory You need ...

  5. 在织梦dedecms中实现“文章标题-栏目名称-网站名”导航

    本文介绍了在dedecms中,实现文章标题-栏目名称-网站名 导航的方法,有需要的朋友参考下. 在dedecms中实现“文章标题-栏目名称-网站名”导航的方法.   第一种: 在/include/in ...

  6. java中io类型及成熟io框架

    就io本身而言,概念上有5中模型:blocking I/O, nonblocking I/O, I/O multiplexing(select and poll), singal driven I/O ...

  7. 将svn的项目转移到另外一个仓库中

    前几天在做一个项目的时候,因为需要,需要将Server A 上SVN仓库 repos1中的项目pro1迁移到Server B 上的SVN仓库中,首先想到的是:通过复制,但是仔细一想,这样是不可能的:然 ...

  8. Bootstrap-CL:按钮组

    ylbtech-Bootstrap-CL:按钮组 1.返回顶部 1. Bootstrap 按钮组 按钮组允许多个按钮被堆叠在同一行上.当你想要把按钮对齐在一起时,这就显得非常有用.您可以通过 Boot ...

  9. 关于serviceComb中的swagger抛出NullPointerException

    在使用serviceComb时, 如果抛出以下异常: org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions > ...

  10. teamviewer被识别为商业用途

    1.卸载teamviewer,在控制面板里或者用360等软件卸载: 2.删除下面两个目录 C:\Program Files (x86)\TeamViewer C:\Users\Administrato ...