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…

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

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

前端学习(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…

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…

前端学习(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…

前端学习(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…

前端学习(1415):ajax的运行环境

// 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express();app.use(express.static(path.join(__dirname))); // 监听端口 app.listen(3000); console.log(网站服务器启动成功, 请访问localhost)

Selenium Webdriver ie 浏览器

webDriver 在测试ie 的时候会遇到很多的问题&#xff0c;记录下&#xff1a; 1.需要ie的driver驱动 需要下载 IEDriverServer.exe 并把这个驱动放在系统ie 的文件夹下 C:\Program Files\Internet Explorer 2.启动selenium 的时候需要将浏览器安全设置给取消掉 3.启动的时候还…

前端学习(1417):ajax实现步骤

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.use(express.static(path.join(__dirname))); // 监听端口 a…

数组结对

1.设计思想&#xff1a;测试数组长度的最大范围&#xff0c;测试每个元素是int32 类型的&#xff0c;将数组的长度设为2&#xff0c;第一个数字输入最大位数的数字&#xff0c;查看结果。 2.出现的问题&#xff1a; 测试1000个元素&#xff0c; 测试1000个元素程序没有问题&…

前端学习(1418):服务器响应的数据格式

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.get(/responsdate, (req, res) > {res.send({ "name…

IT基础架构规划方案二(计算机系统与机房规划规划)

计算机系统规划 服务器硬件选型规划方案 根据对某集团的实际调研&#xff0c;获取了企业业务应用系统的建设情况&#xff0c;随着企业信息化建设的推进&#xff0c;需要对各种信息化管理系统和应用系统的服务器选型进行选型规划&#xff0c;根据不同的系统对服务器硬件的…

前端学习(1419):ajax请求参数传递

ajax.js // 引用expess框架 const express require(express); // 处理路径 const path require(path);// 创建网站服务器 const app express(); app.get(/first, (req, res) > {res.send(hello geyao) }) app.get(/responsdate, (req, res) > {res.send({ "name…

bzoj 3595

Splay 每个节点维护一个区间。 1 /**************************************************************2 Problem: 35953 User: idy0024 Language: C5 Result: Accepted6 Time:5428 ms7 Memory:56020 kb8 *********************************************…

前端学习(1420):ajax的post请求

// 引用expess框架 const express require(express); // 处理路径 const path require(path);const bodyParser require(body-parser);// 创建网站服务器 const app express(); app.use(bodyParser.urlencoded()); app.get(/first, (req, res) > {res.send(hello geyao)…