jsp+oracle 排序分页+Pageutil类

1.rownum和排序

Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。

SQL> select rownum ,id,name from student order by name;

ROWNUM ID      NAME

3 200003 李三

2 200002 王二

1 200001 张一

4 200004 赵四

可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询

SQL> select rownum ,id,name from (select * from student order by name);

ROWNUM ID      NAME

1 200003 李三

2 200002 王二

3 200001 张一

4 200004 赵四

这样就成了按name排序,并且用rownum标出正确序号(有小到大)

以前分页习惯用这样的SQL语句:

select * from

(select t.*,rownum row_num from mytable t order by t.id) b

where b.row_num between 1 and 10

结果发现由于该语句会先生成rownum 后执行order by 子句,因而排序结果根本不对,后来在GOOGLE上搜到一篇文章,原来多套一层select 就能很好的解决该问题,特此记录,语句如下:

select * from

(select a.*,rownum row_num from

(select * from mytable t order by t.id desc) a

) b where b.row_num between 1 and 10 

2.分页排序

主要思想:采用PageUtil类和用基于rownum的排序分页技术得到每页的内容。

(1)使用上一文章的pageutil类

(2)在查询类里得到结果

public List showList(int start,int end)
{
List<Oplist> listShow = new ArrayList<Oplist>();
DB_OPER db=new DB_OPER();
String s=select * from(select a.*,rownum row_num from(select * from mytable t order by t.id desc) a) b where b.row_num between 1 and 10”;

 Result result=db.executeQuery(s);

......//将result转为list

return listShow;

}

//得到总行数 

public int AllCount()
{
DB_OPER db=new DB_OPER();
Result result=db.executeQuery("select count(*) as count from a");
Map row = result.getRows()[0];
int size=Integer.parseInt(row.get("count").toString());
return size;
}

(3)在jsp页面查询

<%listOper db=new listOper();
int size=0;
size=db.AllCount();//得到总数
//System.out.println(size);
String pageStr = request.getParameter("page");
int currentPage = 1;
if (pageStr != null)
currentPage = Integer.parseInt(pageStr);
PageUtil pUtil = new PageUtil(15, size, currentPage);
currentPage = pUtil.getCurrentPage();
System.out.println("start:"+pUtil.getFromIndex());
System.out.println("end:"+pUtil.getToIndex());
List result=db.showList(pUtil.getFromIndex()+1, pUtil.getToIndex());

%>

(3)在jsp页面显示结果

<%

for (int i = 0; i <result.size() ; i++) {
Oplist model = (Oplist) result.get(i);
out.print("<TR class=‘alter‘><TD>"+(i+1+pUtil.getFromIndex())+"</TD>");
out.print("<TD>"+model.getLcbh()+"</>");
out.print("<TD>"+model.getFwsx()+"</TD>");

%>

时间: 2024-10-19 09:55:32

jsp+oracle 排序分页+Pageutil类的相关文章

JSP+Oracle实现分页功能

Oracle: create table load( id char(200) not null, title varchar2(100) not null, time varchar2(100) not null, def1 varchar2(100), def2 varchar2(200), def3 varchar2(300), def4 varchar2(400), def5 varchar2(500), dr number(10) default 0, ts char(19) defa

Oracle 排序

按拼音排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_PINYIN_M'); 按部首排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_STROKE_M'); 按笔画排序 select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_RADICAL_M'); 排序后

Oracle中分页查询语句

Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.Oracle分分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE

Mysql与Oracle的分页查询比较

MySql分页查询语句 下列查询语句中m代表行数的索引默认从0开始类似于pl/sql中的游标0表示从第一条开始n表示向后查询多少条数据. 例如: select * from emp limit 2,3表示查询第三条数据到第六条数据(包前不包后)也就是第三条数据包括第三条数据不包括第六条数据 也就是 3, 4,5条记录 select * from buss_stu_info limit m,n; Oracle数据库分页查询 一层分页查询: 及时数据量足够大几乎也不会受到影响查询速率足够快,一般在写

jsp多链接分页

jsp多链接分页 1.实现效果: 2.实现代码详解与分析 //<%Java代码必须在这里面写%>,带参数类型<%=参数名%> <body> <% ArticleDao artDao = new ArticleDao();     //方法类(方法都写在这里面,在后面会显示这个类的代码) String getType = request.getParameter("type");//获得你点击的链接的参数type String getSort =

Oracle之分页查询

Oracle之分页查询 Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的范围.

jsp自定义标签分页

自定义标签分页大大简化了jsp页面的代码量,减少了代码的冗余,提高了代码的重用性. 第一步:建立分页实体page类 1 package com.soda.util; 2 /** 3 * @description 分页实体类 4 * @author line 5 * @time 2016年8月28日11:16:50 6 */ 7 public class Page { 8 private int pageSize;//每页记录per 9 private int totalSize;//总记录tot

Java Web的分页工具类

最近写一个java web项目,以前分页的工具类,都是基础架构的人写好了的.也没有去细看,现在遇到这个状况. 就整理一下思路,自己写了一个分页的工具类.写的不好之处,还望斧正. 下面是我的代码: PageUtil.java 1 package util; 2 3 import java.util.Map; 4 5 /** 6 * 分页工具类 7 * @author lyh 8 * 9 */ 10 public class PageUtil { 11 private int total; //总数

drf 其他功能组件 - 限流-过滤-排序-分页-异常处理-生成接口文档-Xadmin

目录 限流Throttling 使用 可选限流类 实例 过滤Filtering 排序 分页Pagination 可选分页器 异常处理 Exceptions REST framework定义的异常 自动生成接口文档 安装依赖 设置接口文档访问路径 文档描述说明的定义位置 访问接口文档网页 Xadmin 安装 使用 限流Throttling 可以对接口访问的频次进行限制,以减轻服务器压力. 一般用于付费购买次数,投票等场景使用. 使用 可以在配置文件中,使用DEFAULT_THROTTLE_CLAS