Servlet分页技术
这是看韩顺平老师的servlet视频,自己动手写的,楼主看韩顺平老师的servlet是2006制作的,用的是sql server数据库,自己又用的是oracle数据库,所以怕有的同学遇到同样的问题,不知道去哪参考oracle,所以想写一写oracle版本的servler分页技术!在写代码之前,首先要弄明白分页算法:
四个变量,int pageSize:每页显示多少条记录.int pageNow:希望显示第几页.int pageCount:一共有多少页,int rowCount:一共有多少条记录! 其中,pageSize是指定的,pageNow是用户或者默认的,就是现在显示第几条,rowCount是从表中查询得到的,pageCount是表示页数,有多少页,需要计算,计算的算法是:
if(rowCount%pageSize == 0) { pageCount = rowCount/pageSize; } else { pageCount = rowCount/pageSize + 1; }
从数据库中查询出记录总数的slq语句:
select count(*) from users
分页时候遇到一个问题,如果第十一条数据到第二十条数据中,缺少一条,也就是说,记录顺序不是连续的,是断开的,怎么查询出连续的记录?sql语句如下:
rs = st.executeQuery("select * from(select t.*, rownum rn from(select * from users order by userid) t where rownum <=" + pageNow*pageSize+ ") where rn >=" + ((pageNow-1)*pageSize+1) +"");
在不断的调试代码过程中,还顺便引入了css和加入动态图片,效果如图,
java代码:
package cn.com.shizongger; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import java.io.*; public class FenYe extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res){ int pageSize = 5; //每页显示5条记录 int pageNow = 1; //希望显示第几页,默认第一页 int pageCount = 0; //总数页,用总记录数除每页显示多少条记录 int rowCount = 0; //总记录数 //从数据库中计算出总记录数 Connection ct = null; Statement st = null; ResultSet rs = null; res.setContentType("text/html;charset=gbk"); //从url中获取要现实的页数 String pageStr = req.getParameter("pageNow"); try{ PrintWriter out = res.getWriter(); //1.加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //2.得到链接 ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "Shizongger_5476"); //获取状态 st = ct.createStatement(); //从数据库中获取总记录数 rs = st.executeQuery("select count(*) from users"); if(rs.next()) { rowCount = rs.getInt(1); if(rowCount%pageSize == 0) { pageCount = rowCount/pageSize; } else { pageCount = rowCount/pageSize + 1; } } if(pageStr != null) { //从字符串中转整型 pageNow = Integer.parseInt(pageStr); if(pageNow > pageCount) { pageNow = pageCount; } else if(pageNow < 1) { pageNow = 1; } } //从数据库中查询记录 //rs = st.executeQuery("select * from users where userid between " + ((pageNow-1)*pageSize+1) // + " and " + pageNow*pageSize + " order by userid"); rs = st.executeQuery("select * from(select t.*, rownum rn from(select * from users order by userid) t where rownum <=" + pageNow*pageSize+ ") where rn >=" + ((pageNow-1)*pageSize+1) +""); System.out.println(((pageNow-1)*pageSize+1) + " " + (pageNow*pageSize)); out.println("<html>\n<head>"); //为页面添加css样式 out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"mycss.css\" />"); out.println("</head>\n<body background=hudie.gif><center>"); out.println("<h1>恭喜,你已经成功登录系统</h1>"); out.println("总记录:" + rowCount); out.println("<table>"); out.println("<tr><th>用户ID</th><th>用户名</th><th>密码</th><th>Email</th><th>等级</th></tr>"); while(rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getInt(1) + "</td>"); out.println("<td>" + rs.getString(2) + "</td>"); out.println("<td>" + rs.getString(3) + "</td>"); out.println("<td>" + rs.getString(4) + "</td>"); out.println("<td>" + rs.getInt(5) + "</td>"); out.println("</tr>"); } out.println("</table>"); //显示首页 out.println("<a href=fenye?pageNow=" + 1 + " >" + "首页" + "</a>"); //显示上一页 out.println("<a href=fenye?pageNow=" + (pageNow-1) + " >" + "上一页" + "</a>"); //显示页数 int start = (int)(pageNow/10)*10 + 1; for(int i = start; i <= start+9; i++) { if(i >= 1 && i <= pageCount) { if(i != pageNow) { out.println("<a href=fenye?pageNow=" + i + " >" + i + "</a>"); } else { out.println("<a class=style1 href=fenye?pageNow=" + i + " >" + i + "</a>"); } } } //显示上一页 out.println("<a href=fenye?pageNow=" + (pageNow+1) + " >" + "下一页" + "</a>"); //尾页 out.println("<a href=fenye?pageNow=" + pageCount + " >" + "尾页" + "</a>"); out.println("</center>\n</body>\n</html>"); } catch(Exception ex) { ex.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) { this.doGet(req, res); } }
外部css代码:
table { width:550px; } a:link{ text-decoration:none; color:blue; } a:visited{ text-decoration:line-through; color:blue; } a:hover{ text-decoration:underline; color:red; } a:active{ text-decoration:overline; color:red; } h1{ font-size:24px; color:red; } .style1{ font-size:22px; }
Servlet分页技术的更多相关文章
- Servlet课程0426(八)Servlet分页技术
Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...
- jsp-------------之分页技术(一)
jsp分页技术之: 如下图:百度的喵 看上图中卡哇伊的小苗的爪子下面的数字,就是分页啦!那我们如何做出这样一个效果呢? 下面我们来逐一分解: jsp分页技术一 : (算法) /* int pageS ...
- Javaweb 第15天 web练习和分页技术
第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...
- 改进Spring中的分页技术
Spring中有一个PagedListHolder,能够实现分页. 但此类有几个缺点: 1. 使用此类的代码比較繁琐 2. 此类存放的数据源是全部的记录集,即对于记录数为1000条的数据,即使我们仅仅 ...
- JAVAEE之-----MySQL分页技术(带搜索)
需求: 为什么须要採用分页技术呢?在数据库中我们查询数据的时候,须要将数据返回到显示页面.数据库中含有大量数据,所有显示在一个页面过于太多,所以我们须要採用分页技术.每一页显示不同数据. 主要解决这个 ...
- Mysql学习总结(32)——MySQL分页技术详解
1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录: 2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大 ...
- tp中使用分页技术
1 public function showList() { $m_ld = D ( 'guangxi_ld' ); $page = I ( 'get.p', 1 ); // 在配置中获取分页值 $p ...
- 分页技术之PageDataSource类
之前给大家介绍了分页技术之Gridview控件,今天给大家介绍另外一种分页技术,采用PageDataSource类 + Repeater控件来实现. 前台只需要拖出一个Repeater控件来绑定要显示 ...
- 分页技术之GridView控件
GridView控件实现分页技术 第一步:设置GridView控件的属性,跟分页相关的属性设置如下: AllowPaging="true":允许分页, PageSize=" ...
随机推荐
- angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...
- JSON数据解析 基础知识及链接收集
JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...
- 转 String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- Java中"\t"表示几个空格
\t是补全当前字符串长度到8的整数倍,最少1个最多8个空格补多少要看你\t前字符串长度 测试程序: 测试结果: 总结:运行到“\t”时,判断当前字符串长度,将当前字符串长度补到8的倍数(不包括0).
- 【读书笔记】iOS网络-测试与操纵网络流量
一,观测网络流量. 观测网络流量的行为叫做嗅探或数据包分析. 1,嗅探硬件. 从iOS模拟器捕获数据包不需要做特别的硬件或网络配置.如果需要捕获这些数据包,那么可以使用嗅探软件来监听回送设备或是用于连 ...
- 【Android】监听Notification被清除
前言 一般非常驻的Notification是可以被用户清除的,如果能监听被清除的事件就可以做一些事情,比如推送重新计数的问题. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www ...
- OC与JS的交互
现在APP的开发已经不局限于原生开发,很多都是原生+html5这种混合开发 我们可以通过webView这个控件,实现混合开发. 1.首先你需要创建一个html页面 <html> <h ...
- php设计模式 数据对象映射模式
数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作. 在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作.对象关系映射(Obje ...
- IrfanView 4.36 中文版发布了
IrfanView 4.36 简体中文便携版 小而快的图片浏览器 仅仅不到2M的小软件,功能却能与体积大到几十M的ACDSee相媲美!这个软件就是IrfanView.图片.音频.视频浏览,图片批量格式 ...
- LCS(Longest Common Subsequence 最长公共子序列)
最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...