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

一、可滚动结果集

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.           
  41.         do{  
  42.             if(count>=PAGESIZE)break;  
  43.             int empno = rs.getInt(1);  
  44.             String ename = rs.getString(2);  
  45.             String job = rs.getString(3);  
  46.             Date hiredate = rs.getDate(4);  
  47.             float sal = rs.getFloat(5);  
  48.             int comm = rs.getInt(6);  
  49.             count++;  
  50.             %>  
  51.         <tr>  
  52.             <td><%=empno%></td>  
  53.             <td><%=ename%></td>  
  54.             <td><%=job%></td>  
  55.             <td><%=hiredate%></td>  
  56.             <td><%=sal%></td>  
  57.             <td><%=comm%></td>  
  58.         </tr>  
  59.             <%  
  60.         }while(rs.next());  
  61.         con.close();  
  62.     }  
  63.     catch(Exception e){  
  64.           
  65.     }  
  66. %>  
  67. </table>  
  68. <href = "multipage.jsp?curPage=1" >首页</a>  
  69. <href = "multipage.jsp?curPage=<%=curPage-1%>" >上一页</a>  
  70. <href = "multipage.jsp?curPage=<%=curPage+1%>" >下一页</a>  
  71. <href = "multipage.jsp?curPage=<%=pageCount%>" >尾页</a>  
  72. <%=curPage%>页/共<%=pageCount%>页  
  73.   
  74. </body>  
  75. </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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1406):多人管理26邮箱地址是否存在

// 引入用户集合的构造函数 const { User, validateUser } require(../../model/user); // 引入加密模块 const bcrypt require(bcryptjs);module.exports async(req, res, next) > {try {await validateUser(req.body)} catch (e) {// 验证没有通过// e.message// 重定向…

我的世界JAVA刷怪范围_《我的世界》只有刷怪蛋能够刷新生物吗?并不是,还有一种物品!...

《我的世界》MC能够刷新生物的只有刷怪蛋吗&#xff1f;不&#xff0c;还有一种物品&#xff01;《我的世界》只有刷怪蛋能够刷新生物吗&#xff1f;并不是&#xff0c;还有一种物品&#xff01;在沙盒游戏《我的世界》里面&#xff0c;绝大部分的生物会自然生成于主世界、下界…

Android上传文件至服务器(转)

本实例实现每隔5秒上传一次&#xff0c;通过服务器端获取手机上传过来的文件信息并做相应处理&#xff1b;采用AndroidStruts2技术。 一、Android端实现文件上传 1)、新建一个Android项目命名为androidUpload&#xff0c;目录结构如下&#xff1a; 2)、新建FormFile类&#xff…

前端学习(1407):多人管理27代码优化

// 创建用户集合 // 引入mongoose第三方模块 const mongoose require(mongoose); // 导入bcrypt const bcrypt require(bcryptjs); // 引入joi模块 const Joi require(joi); // 创建用户集合规则 const userSchema new mongoose.Schema({username: {type: String,required:…

java enumerator_NSEnumerator使用

集合类(如&#xff1a;NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator, 该类是一个抽象类&#xff0c;没有用来创建实例的公有接口。NSEnumerator的nextObject方法可以遍历每个集合元素&#xff0c;结束返回nil&#xff0c;通过与while结合使用可遍历集合中所有项。例…

前端学习(1408):多人管理28用户信息展示

userpage.js // 导入用户集合构造函数 const { User } require(../../model/user);module.exports async (req, res) > {// 接收客户端传递过来的当前页参数let page req.query.page || 1;// 每一页显示的数据条数let pagesize 10;// 查询用户数据的总数let count awa…

java c3p0获取主键_Tomcatc3p0配置jnid数据源2种实现方法解析

使用c3p0导入c3p0jar包com.mchangec3p00.9.5.2在tomcat的context.xml文件加入数据源配置auth"Container"description"DB Connection"driverClass"com.mysql.jdbc.Driver"maxPoolSize"100" minPoolSize"2"acquireIncrement&q…

前端学习(1409):多人管理29安装json转换工具

json转换工具 打开谷歌 chrome://flags/#extensions-on-chrome-urls

让struts2和servlet共存

由于struts2默认的是拦截全部的请求 由配置文件能够看出 <filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping…

php sslbug,PHP错误抑制符(@)导致引用传参失败Bug的分析

看下面的例子:$array array(1,2,3);function add (&$arr) {$arr[] 4;}add($array);print_r($array);/**此时, $array没有改变, 输出:Array([0] > 1[1] > 2[2] > 3)*/add($array);print_r($array);/**不使用错误抑制的情况下, 输出正常:Array([0] > 1[1] >…

前端学习(1410):多人管理30数据分页

// 导入用户集合构造函数 const { User } require(../../model/user);module.exports async (req, res) > {// 接收客户端传递过来的当前页参数let page req.query.page || 1;// 每一页显示的数据条数let pagesize 10;// 查询用户数据的总数let count await User.count…

MongoDB分析工具之三:db.currentOp()

db.currentOp() db.currentOp是个好东西&#xff0c;顾名思义&#xff0c;就是当前的操作。在mongodb中可以查看当前数据库上此刻的操作语句信息&#xff0c;包括insert/query/update/remove/getmore/command等多种操作。直接执行 db.currentOp()一般返回一个空的数组&#xff…

php 添加样式,添加样式到php html电子邮件

我仔细查看了这个问题,我在此发现的是添加以下内容&#xff1a;$headers MIME-Version: 1.0 . "\r\n";$headers . Content-type: text/html; charsetiso-8859-1 . "\r\n";和我想发送一个时事通讯类型的电子邮件,所以造型真的很重要.我观看的所有视频都只是…

前端学习(1411):多人管理31数据分页2

{{extend ./common/layout.art}}{{block main}}<!-- 子模板的相对路径相对的就是当前文件 因为它是由模板引擎解析的 而不是浏览器 -->{{include ./common/header.art}}<!-- 主体内容 --><div class"content">{{include ./common/aside.art}}<d…

软件推广

新闻是按照日历来做主导的&#xff0c;如果做的东西也和最近发生的事情有关的话&#xff0c;契合节假日&#xff08;突然想到春运&#xff09;&#xff0c;曝光率会增加在制作软件的同时就要考虑到如何推广。国内的视频公司在视频前的广告和适合做软件推广。新电影上映&#xf…

php按城市显示搜索结果,搜索结果页(通过数据库搜索)

_z2yJxW">本文档讲的是如何通过直接通过数据库搜索接口模板显示搜索结果页。接口&#xff1a;akcms_page.php一 首先在网站根目录创建一个php文件&#xff0c;文件名随便起比如&#xff1a;db_search.php&#xff0c;内容是&#xff1a;$template search.htm;include …

前端学习(1412):多人管理32修改

const { User } require(../../model/user);module.exports async (req, res) > {// 获取到地址栏中的id参数const { message, id } req.query;// 如果当前传递了id参数if (id) {// 修改操作let user await User.findOne({_id: id});// 渲染用户编辑页面(修改)res.rende…

真正能成功的人,不见得是最聪明的,也小见得是学历最高的,而是最能面对问题、锲而不舍的人。...

要知道&#xff0c;这世界上真正能成功的人&#xff0c;不见得是最聪明的&#xff0c;也小见得是学历最高的&#xff0c;而是最能面对问题、锲而不舍的人。 爸爸以前有个同学&#xff0c;追班上一个女生。这男生很不会说话&#xff0c;他开门见山就对女生讲“我爱你”。 那女生…

前端学习(1413):多人管理33修改2(未能完结)

// 引用expess框架 const express require(express); // 创建博客展示页面路由 const admin express.Router();// 渲染登录页面 admin.get(/login, require(./admin/loginPage));// 实现登录功能 admin.post(/login, require(./admin/login));// 创建用户列表路由 admin.get(…

redis php 性能测试工具,redis性能测试与客户端连接详解

Redis 性能测试(推荐&#xff1a;redis入门教程)语法redis-benchmark [option] [option value]实例实例一以下实例同时执行 1000 个请求来检测性能&#xff1a;$ redis-benchmark -n 1000 -qps: 本地 docker 暂时不支持命令。结果跳过&#xff0c;请自行测试。redis:6379> b…