oracle分页方法及java程序实现
2008-04-19 15:19
218 查看
MSSQL SYBASE下面用top 来分页
POSTGRESQL MYSQL就直接用limit更简单了
在oracle 下面有4种方法
oracle分页技术2007年08月13日 星期一 23:08两种分页技术,第二种效率高多了
1. select * from
(select rownum rn,t.* from table t )
where rn <50 and rn>=1
2. select * from
(select rownum rn,t.* from table t rownum<50)
where rn>=1
带排序要求的分页,在9i以上的环境推荐使用分析函数
select * from
(select row_number() over(order by esn) rn,esn,akey from as_esn_info )
where rn <50 and rn>=1
(以上方法验证过)
或者以下
(1)minus差分页 :select * from table where rownum<=10 minus select * from table where rownum<=5
(2)rownum伪列分页 :select * from (select rownum tid,t.* from table t where rownum<=10) where tid>5
(3)notin相反分页:select * from table where id not in(select id from table where rownum<=5) and rownum<=5
下面是第二种方法的java实现:
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
/**
*
* @author renshui
* 对oracle查询进行分页
*
*/
public class Pagination {
private int totalRow; //总记录数
private int totalPage; //总页数
private int currentPage = 1; //当前页码,从1计起
private int numPerPage; //每页记录数
private DataSource dataSource; //数据源
private JdbcTemplate jdbcTemplate; //spring jdbcTemplate
private String sql; //查询语句
public Pagination(String sql,int numPerpage,DataSource dataSource){
this.setSql(sql);
this.setNumPerPage(numPerpage);
jdbcTemplate = new JdbcTemplate(dataSource);
String totalSql = "select count(1) from (" + sql + ")";
this.setTotalRow(jdbcTemplate.queryForInt(totalSql)); //设置总行数
this.setTotalPage(); //计算总页数
}
/**
* 取得下一页内容
* @return 下页内容的列表
*/
public List getNextPage(){
if(currentPage > totalPage)
return null;
int startIndex = (currentPage-1) * numPerPage + 1;
int endIndex = 0;
if(currentPage == totalPage)
endIndex = totalRow;
else
endIndex = currentPage * numPerPage;
StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");
paginationSQL.append(sql);
paginationSQL.append(" ) temp where ROWNUM <= " + endIndex);
paginationSQL.append(" ) WHERE num >= " + startIndex);
System.out.println(paginationSQL.toString());
List list = jdbcTemplate.queryForList(paginationSQL.toString());
currentPage++;
return list;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public int getNumPerPage() {
return numPerPage;
}
public void setNumPerPage(int numPerPage) {
this.numPerPage = numPerPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage() {
if(totalRow%numPerPage == 0)
totalPage = totalRow / numPerPage;
else
totalPage = totalRow / numPerPage + 1;
}
public int getTotalRow() {
return totalRow;
}
public void setTotalRow(int totalRow) {
this.totalRow = totalRow;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
} 阅读更多
POSTGRESQL MYSQL就直接用limit更简单了
在oracle 下面有4种方法
oracle分页技术2007年08月13日 星期一 23:08两种分页技术,第二种效率高多了
1. select * from
(select rownum rn,t.* from table t )
where rn <50 and rn>=1
2. select * from
(select rownum rn,t.* from table t rownum<50)
where rn>=1
带排序要求的分页,在9i以上的环境推荐使用分析函数
select * from
(select row_number() over(order by esn) rn,esn,akey from as_esn_info )
where rn <50 and rn>=1
(以上方法验证过)
或者以下
(1)minus差分页 :select * from table where rownum<=10 minus select * from table where rownum<=5
(2)rownum伪列分页 :select * from (select rownum tid,t.* from table t where rownum<=10) where tid>5
(3)notin相反分页:select * from table where id not in(select id from table where rownum<=5) and rownum<=5
下面是第二种方法的java实现:
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
/**
*
* @author renshui
* 对oracle查询进行分页
*
*/
public class Pagination {
private int totalRow; //总记录数
private int totalPage; //总页数
private int currentPage = 1; //当前页码,从1计起
private int numPerPage; //每页记录数
private DataSource dataSource; //数据源
private JdbcTemplate jdbcTemplate; //spring jdbcTemplate
private String sql; //查询语句
public Pagination(String sql,int numPerpage,DataSource dataSource){
this.setSql(sql);
this.setNumPerPage(numPerpage);
jdbcTemplate = new JdbcTemplate(dataSource);
String totalSql = "select count(1) from (" + sql + ")";
this.setTotalRow(jdbcTemplate.queryForInt(totalSql)); //设置总行数
this.setTotalPage(); //计算总页数
}
/**
* 取得下一页内容
* @return 下页内容的列表
*/
public List getNextPage(){
if(currentPage > totalPage)
return null;
int startIndex = (currentPage-1) * numPerPage + 1;
int endIndex = 0;
if(currentPage == totalPage)
endIndex = totalRow;
else
endIndex = currentPage * numPerPage;
StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");
paginationSQL.append(sql);
paginationSQL.append(" ) temp where ROWNUM <= " + endIndex);
paginationSQL.append(" ) WHERE num >= " + startIndex);
System.out.println(paginationSQL.toString());
List list = jdbcTemplate.queryForList(paginationSQL.toString());
currentPage++;
return list;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public int getNumPerPage() {
return numPerPage;
}
public void setNumPerPage(int numPerPage) {
this.numPerPage = numPerPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage() {
if(totalRow%numPerPage == 0)
totalPage = totalRow / numPerPage;
else
totalPage = totalRow / numPerPage + 1;
}
public int getTotalRow() {
return totalRow;
}
public void setTotalRow(int totalRow) {
this.totalRow = totalRow;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
} 阅读更多
相关文章推荐
- Java Quartz的使用方法,实现程序计时
- C# winform程序实现分页的三种方法
- 分页技术原理与实现(二)——Java+Oracle代码实现
- jsp+servlet+javabean实现数据分页方法完整实例
- java ssm框架实现分页功能 (oracle)
- java 卖票程序的两种实现方法
- MySQL、SqlServer、Oracle三大主流数据库实现分页查询的方法
- JavaWeb基础+oracle实现简单简单分页商品浏览与加入购物车系统
- java+oracle 分页技术实现
- java编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。定义乐器类Instrument,包括方法makeSound() 。定义乐器类的子类
- Java程序9 X 9乘法表(补:第二种方法:递归算法实现99乘法表|再补:解析递归算法)
- Java程序操作Oracle两种方式之简单实现
- java实现的分页方法(按照页码范围分页)
- 分页的封装——java实现(基于oracle)
- 举例详解用Java实现web分页功能的方法
- oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
- Java实例 定义任务的一个发射小程序 实现Runnable接口并编写run()方法
- Java程序实现oracle远程数据库的备份和恢复
- 黑马程序员——java多线程的几种实现方法及多窗口售票小程序
- Java程序实现oracle远程数据库的备份和恢复