分页SQL语句:

----分页显示
select * from (select rownum as r,t.* from
(select emp.* from emp order by hiredate desc) t where rownum<=10)
where r>5;

查询的结果如下:

这个SQL,使用了三层嵌套的查询方式:

1)最内层的select 语句

最内层的Select语句是一条普通的查询语句,它的执行结果,将是emp表中的所有数据按照受雇日期降序排列.

2)第二层的select 语句

这一层的Select 语句使用了rownum,这条语句的执行结果就是从最内层语句的查询结果中按照rownum的顺序取出前10条.实际上,中间层的select 语句的执行结果是限制查询记录数量的最大记录数。

3)最外层的select 语句

既然中间层的select语句控制了查询过程中数据的最大记录数,那么最外层的select语句就要控制查询过程中的最小记录数。由此可以得出的结论是:上面SQL的执行结果就是查询emp表中第6条~~~第10条的数据记录.

通过以上的分析,我们了解了在Oracle众分页查询的实现原理。现在要做的就是在第二层和最外层将数据库记录的最大值和最小值替换成我们需要的值。

String sql="select * from (select rownum as r,t.* from " +
"(select emp.* from emp order by hiredate desc) t where rownum<="+(pageSize*pageIndex)
+") where r>"+pageSize*(pageIndex-1);

上面就是下面将要使用的分页查询的SQL语句,并使用到了两个变量,分别是pageSize和pageIndex,其中pageSize表示每页显示的数据条数,而pageIndex变量表示当前页的页码。

下面的代码是简单的实现了Oracle分页查询在JSP分页展示数据的实现。写的比较简单,在JSP中嵌套java代码比较乱,建议使用Servlet。

首先,需要编写一个是实现分页查询的java类,没有进行特殊的整合,凑合着吧,原理就是这样:

在分页显示时,每页显示数据量是固定的,假设每页显示10条数据,第1页的编号就是1到10,当用户单击第二页时显示的数据编号为11--20,以此类推,限制最后一页。

这样我们可以总结出一个规律:

每页显示的第一条数据行号应该等于 【每页显示的数据量*(当前页码-1)+1】。-----可以看出上面的SQL的最外层 R>【每页显示的数据量*(当前页码-1)】,这样行号才匹配。

每页显示的最后一条数据行号等于【每页显示的数据量*当前页码】。

经过分析,我们对上面的SQL进行修改,得到下面的代码:

 package com.dao;  

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class EmpDao {
private Connection conn=null;
private PreparedStatement psmt=null;
private ResultSet rs=null;
/**
* 获得数据库连接
*/
private void openConn(){
//首先定义下连接数据的URL、用户名、密码
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user="scott";
String password="yulei123";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获得所有员工数据
*/
public List getAllemp(){
List list=new ArrayList();
openConn();
String sql="select * from emp order by hiredate desc";
try {
psmt=conn.prepareStatement(sql);
rs=psmt.executeQuery();
while(rs.next()){
Map emps=new HashMap();
emps.put("empno", rs.getString("empno"));
emps.put("ename",rs.getString("ename"));
emps.put("sal", rs.getString("sal"));
list.add(emps);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取第几页的数据
*/
public List getAllempByPage(int pageSize,int pageIndex){
List list =new ArrayList();
String sql="select * from (select rownum as r,t.* from " +
"(select emp.* from emp order by hiredate desc) t where rownum<="+(pageSize*pageIndex)
+") where r>"+pageSize*(pageIndex-1);
try {
psmt=conn.prepareStatement(sql);
rs=psmt.executeQuery();
while(rs.next()){
Map map=new HashMap();
map.put("empno", rs.getString("empno"));
map.put("ename",rs.getString("ename"));
map.put("sal", rs.getString("sal"));
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取员工的总数
*
*/
public int countEmp(){
int count=0;
String sql="select count(*) from emp";
openConn();
try {
psmt=conn.prepareStatement(sql);
rs=psmt.executeQuery();
while(rs.next()){
count=rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
/**
* 根据每页显示的数量,得到总页数
*/
public int getTotalPage(int pageSize){
int totalPage=countEmp();
return (totalPage%pageSize==0)?(totalPage/pageSize):(totalPage/pageSize+1);
}
}

接下来就是编写JSP文件,命名为pageTest.jsp.

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.dao.EmpDao"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Oracle分页</title>
</head>
<body>
<%
EmpDao ed=new EmpDao();
int pageSize=4;//每页显示的记录
int totalpages=ed.getTotalPage(pageSize); //最大页数
String currentPage=request.getParameter("pageIndex"); //获得当前的页数,即第几页
if(currentPage==null){
currentPage="1";
}
int pageIndex=Integer.parseInt(currentPage);
//添加逻辑判断,防止页数异常
if(pageIndex<1){
pageIndex=1;
}else if(pageIndex>totalpages){
pageIndex=totalpages;
}
List list= ed.getAllempByPage(pageSize,pageIndex); //返回特定页数的数据
%>
<!-- 循环显示员工的数据 -->
<table border="1">
<tr>
<td>员工工号</td>
<td>员工姓名</td>
<td>员工工资</td>
</tr>
<%
Map map=null;
for(int i=0;i<list.size();i++){
map=(Map)list.get(i);
%>
<tr>
<td><%=map.get("empno") %></td>
<td><%=map.get("ename") %></td>
<td><%=map.get("sal")%></td>
</tr>
<% }%>
</table>
<a href="pageTest.jsp?pageIndex=1">首页</a>
<a href="pageTest.jsp?pageIndex=<%=pageIndex-1 %>">上一页</a>
<a href="pageTest.jsp?pageIndex=<%=pageIndex+1 %>">下一页</a>
<a href="pageTest.jsp?pageIndex=<%=totalpages%>">末页</a>
<br/>
<p style="color:red"">当前页数:<%=pageIndex%></p>
</body>
</html>

最后,我们在浏览器访问这个JSP文件.

本文来源于:

http://blog.csdn.net/yulei_qq/article/details/16829695

Java Web中将oracle的数据库内容以表格形式展现到页面中(分页展示)的更多相关文章

  1. jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)

    jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...

  2. Java Web工程连接MySQL数据库及Tomcat服务器页面中文乱码

    Java Web工程连接MySQL数据库 一. 准备工作 1.下载连接MySQL数据库的JDBC (可以去官网下,也可以去百度云找) 2.将下载的jar文件复制到Tomcat的lib目录下 3.新建一 ...

  3. java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会

    看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...

  4. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Eclipse创建的Java Web项目,如何启用外置浏览器访问jsp或者html页面

    当我们用Eclipse创建了一个Java Web项目,想访问一个jsp或者html页面时,通常会在目标页面(以jsp为例)上点击鼠标右键,选择[Run As]——>[Run on Server] ...

  6. java web filter读取classpath配置文件内容

    以下demo,从类路径classpath中获取venus.properties(本项目中用到的文件),思路是在初始化的时候读取,然后放在局部变量里面. package club.codeapes.we ...

  7. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. java 读取数据库中文信息,为何在jsp页面中出现乱码

    有如下几种解决办法:1.保证项目的字符编码和每一个jsp页面的字符编码一致,如果不一致可能导致中文乱码问题<%@ page language="java" contentTy ...

随机推荐

  1. Centos7 搭建hadoop2.6 HA

    用户配置: User :root Password:toor 2.创建新用户 student Pwd: student 3.安装virtualbox的增强工具软件 4.系统默认安装的是openjdk ...

  2. 如何在nopcommerce3.3注册页面添加密码强度检查仪?

    我刚刚完成了nopCommerce注册页面的密码强度检查仪,因为我觉得在电子商务交易平台,安全问题是非常重要的.在注册页面有必要添加一个密码强度检测仪,以便通知用户他们的密码是否足够强大.今天,大多数 ...

  3. 【温故而知新-Javascript】图片效果(图像震动效果、闪烁效果、自动切换图像)

    1.当鼠标指针经过图像时图像震动效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  4. 测试思考[持续更新ing]

    1.如何设计好的测试用例,提高测试覆盖率?提高测试效率? 2.如何展现测试成果? 3.如何编写专业化.优质的测试文档? 4.如何适时借助测试工具,测试一些重复性比较高的测试? 5.如何引入自动化测试? ...

  5. 2014 Super Training #8 C An Easy Game --DP

    原题:ZOJ 3791 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791 题意:给定两个0-1序列s1, s2,操作t ...

  6. AC日记——逃跑的拉尔夫 codevs 1026 (搜索)

    1026 逃跑的拉尔夫  时间限制: 1 s    空间限制: 128000 KB    题目等级 : 黄金 Gold 题解       题目描述 Description   年轻的拉尔夫开玩笑地从一 ...

  7. Jsp c标签数值格式化

    整数带千分符显示:<fmt:formatNumber value="${num}" type="number"/> 整数显示:<fmt:for ...

  8. 如何在mac上安装gradle

    首先,先download最新版本的gradle,网址如下:http://www.gradle.org/get-started然后将下载下来的zip包放在你要安装的路径上,我安装在/usr/local/ ...

  9. localStroage的用法

    Cookie 每个域名存储量比较小(各浏览器不同,大致4K) 所有域名的存储量有限制(各浏览器不同,大致4K) 有个数限制(各浏览器不同) 会随请求发送到服务器 LocalStorage 永久存储 单 ...

  10. 10301 MySQL各个版本区别及下载

    参考:http://www.admin10000.com/document/62.html MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会 ...