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=" ...
随机推荐
- 20个基于 WordPress 搭建的精美网站
WordPress 无处不在,小到人博客,大到广受欢迎的各类特色网站,你都能发现 WordPress 的影子,因为它是创建和维护一个网站最容易使用的平台. 另外,网络上有很多资源来创建你的网站,你基本 ...
- Ajax关于readyState(状态值)和status(状态码)的研究
var getXmlHttpRequest = function () { try{ //主流浏览器提供了XMLHttpRequest对象 return new XMLHttpRequest(); } ...
- 【javascript激增的思考01】模块化编程
前言 之前我做过一个web app(原来可以这么叫啦),在一个页面上有很多小窗口,每个小窗口都是独立的应用,比如: ① 我们一个小窗口数据来源是腾讯微博,需要形成腾讯微博app小窗口 ② 我们一个小窗 ...
- angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)
昨天晚上写完angular源码分析:angular中jqLite的实现--你可以丢掉jQuery了,给今天定了一个题angular源码分析:injector.js文件,以及angular的加载流程,但 ...
- HTTP与HTTPS握手的那些事
今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的. 前提 在讲述这两个握手时候,有一些东西需要提前说明. HTTP与TCP/IP区别? TPC/IP协议是传输层 ...
- 每日一博 | 用 Ionic2 创建 App 启动页滑动欢迎界面
原文 https://my.oschina.net/qinphil/blog/777787 效果如下,图片来自网络 本文例子和上图稍有不同,主要功能如下: 每滑动一下展示一张全屏图片: 滑动到最后一 ...
- CYQ.Data 数据框架 使用篇一 入门指南
快速使用帮助 | 回贴(13) | 浏览(11303) | 发表日期 :2010-12-20 20:12:29 #楼主 本文针对V5版本进行修改于(2016-07-04) 下面是使用步骤: 一 ...
- node模块的分类
模块的分类 1.核心模块 2.文件模块 3.第三方模块(npm安装的) 模块的引用: 1.路径 2.模块名 模块的流程: 1.创建模块:teacher.js 2.导出模块:exports.add=fu ...
- igraph安装(R/Python)
python-igraph:啥都不说了,用Ubuntu吧,虽然按照官方的流程还是会出错,但是排错会比较少,一般找不了多久就能找到解决方案 R-igraph:一般需要升级R版本,用3.3吧.升级R的方法 ...
- Javascript 优化项目代码技巧之语言基础(一)
Javascript的弱类型以及函数作用域等规则使用编写Javascript代码极为容易,但是编写可维护.高质量的代码却变得十分困难,这个系列的文章将总结在项目开发过程中,能够改善代码可读性. ...