分页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. 【温故而知新-Javascript】窗口效果 (全屏显示窗口、定时关闭窗口)

    1.全屏显示窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  2. POJ 1990 MooFest --树状数组

    题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量.求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x ...

  3. MySQL数据库学习笔记(三)----基本的SQL语句

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. Linux命令学习-date

    date命令可以用来显示和修改系统日期时间,注意不是time命令. 1.在命令行输入date显示当前时间 [root@vm4 logs]# dateSat Nov 22 00:00:02 CST 20 ...

  5. C# using 三种使用方式 C#中托管与非托管 C#托管资源和非托管资源区别

    1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到. ...

  6. Eclipse发布地址不同引发的问题

    eclipse发布到workspace metadata时,进不去http://localhost:8888页面.但是,它可以启动JAZZ和“公司的一个工程”. 而 eclipse发布到tomcat ...

  7. sp_executesql介绍和使用

    原文:http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html execute相信大家都用的用熟了,简写为exec,除了用来执行存 ...

  8. Android 画布绘图

    我们已经介绍了Canvas,在那里,已经学习了如何创建自己的View.在第7章中也使用了Canvas来为MapView标注覆盖. 画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图 ...

  9. 【转】【PNG压缩工具】PNG 图像的优化及压缩工具介绍

    图像格式有许多种不同类型,在互联网上最常见的有JPEG.GIF.BMP.TIFF和PNG.每一种图像格式都有它自己的用途,比如GIF是用于动画的,JPEG是用于高清图片的,这种图片在保存或者调整大小后 ...

  10. shell小结

    一 判断 -d 测试是否为目录.-f 判断是否为文件. -s 判断文件是否为空 如果不为空 则返回0,否则返回1 -e 测试文件或目录是否存在. -r 测试当前用户是否有权限读取. -w 测试当前用户 ...