java sql分页_mysql、sqlserver、oracle分页,java分页统一接口实现
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量
oracle分页:
select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart
sqlServer分页:
select * from ( select top 页面容量 from( select top 页面容量*当前页码 * from 表 where 条件 order by 字段A) as temptable1 order by
字段A desc) as temptable2 order by 字段A
Mysql分页:
select * from mytable where 条件 limit 当前页码*页面容量-1 to页面容量
Java分页接口和实现类:
package com.qg.demo.util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class OracleUtil {
private String dataSourceName;
private DataSource ds;
public OracleUtil(String dataSourceName){
this.dataSourceName = dataSourceName;
}
public OracleUtil(){
}
public void setDataSourceName(String dataSourceName){
this.dataSourceName = dataSourceName;
}
public void init(){
Context initContext;
try {
initContext = new InitialContext();
ds = (DataSource)initContext.lookup(dataSourceName);
} catch (NamingException e) {
e.printStackTrace();
}
}
public int update(String sql,String[] param){
int result = 0;
QueryRunner qr = new QueryRunner(ds);
try {
result = qr.update(sql,param);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public Object query(String sql,String[] param,ResultSetHandler rsh){
QueryRunner qr = new QueryRunner(ds);
Object result = null;
try {
result = qr.query(sql, param,rsh);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public static Connection getConnection(){
Connection conn = null;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
conn = ds.getConnection();
QueryRunner qr = new QueryRunner(ds);
// PreparedStatement pstmt = conn.prepareStatement("select * from guestbook");
// ResultSet rs = pstmt.executeQuery();
// while(rs.next()){
// System.out.println(rs.getInt("g_id"));
// System.out.println(rs.getString("title"));
// System.out.println(rs.getString("remark"));
// }
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
}
package com.qg.demo.util;
import java.util.List;
public interface Pagination {
public boolean isLast();
public boolean isFirst();
public boolean hasNext();
public boolean hasPrevious();
public int getMaxElements();//最大记录数
public int getMaxPage();//最大页码
public int getNext();
public int getPrevious();
public int getPageSize();
public int getPageNumber();
public List getList();
public void setPageSize(int pageSize);
public void setPageNumber(int pageNumber);
}
package com.qg.demo.util;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class OraclePaginationImpl implements Pagination {
private int pageSize = 20;
private int pageNumber = 1;
private int maxElements;
private int maxPage;
private String sql;
private OracleUtil db;
public OraclePaginationImpl(String sql){
this.sql = sql;
init();
}
public OraclePaginationImpl(String sql,int pageSize, int pageNumber){
this.sql = sql;
this.pageSize = pageSize;
this.pageNumber = pageNumber;
init();
setPageNumber(pageNumber);
}
private void init(){
db = new OracleUtil("java:/comp/env/jdbc/oracleds");
db.init();
setMaxElements();
setmaxPage();
}
private void setMaxElements() {
//select * from xxx order by xx desc
//select count(1) from xxx order by xx desc
String regex = "select((.)+)from";
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
String[] s = p.split(this.sql);
String newSql = "select count(1) as total from "+s[1];
ResultSetHandler handler = new ResultSetHandler(){
public Object handle(ResultSet rs) throws SQLException{
if(rs.next()){
return new Integer(rs.getInt("total"));
}else{
return null;
}
}
};
this.maxElements = (Integer)db.query(newSql, null, handler);
}
private void setmaxPage(){
this.maxPage = (maxElements%pageSize == 0 ? maxElements/pageSize : (maxElements/pageSize +1));
}
private String sqlModify(String sql,int begin ,int end){
StringBuffer buffer = new StringBuffer();
buffer.append("select * from ( select rownum num,a.* from (")
.append(sql)
.append(") a where rownum <= ")
.append(end)
.append(") where num >= ")
.append(begin);
return buffer.toString();
}
private int getBeginElement() {
return (pageNumber-1) * pageSize +1;
}
private int getEndElement() {
return (pageNumber*pageSize >=maxElements ? maxElements : pageNumber*pageNumber);
}
public List getList() {
String newSql = this.sqlModify(sql, getBeginElement(), getEndElement());
return (List)db.query(sql, null, new MapListHandler());
}
public int getMaxElements() {
return maxElements;
}
public int getMaxPage() {
return maxPage;
}
public int getNext() {
return pageNumber+1 >= maxPage ? maxPage : pageNumber+1;
}
public int getPageNumber() {
return pageNumber;
}
public int getPageSize() {
return pageSize;
}
public int getPrevious() {
return pageNumber-1 <=1 ? 1 :pageNumber -1;
}
public boolean hasNext() {
return pageNumber < maxPage;
}
public boolean hasPrevious() {
return pageNumber > 1;
}
public boolean isFirst() {
return pageNumber == 1;
}
public boolean isLast() {
return pageNumber == maxPage;
}
public void setPageNumber(int pageNumber) {
if(pageNumber>maxPage){
this.pageNumber = maxPage;
}else if(pageNumber<1){
this.pageNumber = 1;
}else{
this.pageNumber = pageNumber;
}
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
java sql分页_mysql、sqlserver、oracle分页,java分页统一接口实现相关推荐
- java.sql在哪_我的Java访问MS SQL的程序错在哪了?谢谢!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我用的开发工具是Jbuilder2006, MS SQL SERVER 2000. 源程序是: package data; import java.*; ...
- oracle java认证_如何通过Oracle的Java认证-开发人员实用指南
oracle java认证 by javinpaul 由javinpaul 如何通过Oracle的Java认证-开发人员实用指南 (How to Pass Oracle's Java Certific ...
- java sql 返回 json_java访问oracle 返回json 实践(一)
------------建一个javabean 类 WorkRecord 用于保存访问数据库记录的内容 public class WorkRecord { private long do_seq; p ...
- html 分页_MySQL——优化嵌套查询和分页查询
Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写 ...
- oracle游标多线程,多线程jdbc游标分页查询原理 oracle和mysql分页
分页查询中如何使用多线程加快处理速度? 分页sql是拼起来的现在怎么优化可以提高展示速度:优化思路: 1.试试并发多线程访问,然后把多线程获取的结果合并在一起. 2.做索引,加快查询速度. 3.把经常 ...
- java sql数字溢出_nested exception is java.sql.SQLException: 数字溢出的问题解决
[进行数据库(mysql5.0)查询时出现如下异常:nested exception is java.sql.SQLException: Unknown type 246 in column 1 of ...
- java.sql.date格式化_如何将java.sql.date格式化为这种格式:“MM-dd-yyyy”?
我需要以下面的格式"MM-dd-yyyy"获取 java.sql.date,但是我需要它来保留java.sql.date所以我可以将它作为日期字段放入表中.因此,格式化后它不能是S ...
- oracle分页数据,在Oracle中得到分页数据
在Oracle中得到分页数据 得到DataSet的值 例子如下: /// /// 得到Colletion分页数据 /// public DataSet GetList(int PageIndex, i ...
- import java.sql.*;问题:The package java.sql is not accessible
在项目中的 src 目录下面有一个文件 module-info.java,打开它,里面的内容应该是: module 项目名 {},只需要在大括号中加一句话 requires java.sql; 即可
- java sql 工资管理,企业工资管理系统(Java+MySQL)Word版
<企业工资管理系统(Java+MySQL)Word版>由会员分享,可在线阅读,更多相关<企业工资管理系统(Java+MySQL)Word版(24页珍藏版)>请在人人文库网上搜索 ...
最新文章
- oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...
- python代码架构_Python架构
- JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结
- C语言常量类型及名称,菜鸟带你入门C语言|基本数据类型之常量
- 三星电视与计算机连接网络设置,三星电视怎么连接网络看电视?
- logrotate日志轮转策略
- sql server小知识
- web 打印插件 hiprint 使用
- fedora 29 使用百度网盘客户端
- 数据安全合规体系建设白皮书
- [洛谷P3987]我永远喜欢珂朵莉~
- linux宝塔下如何强制ssl,宝塔面板一键安装SSL证书强制HTTPS访问设置
- HTB-SolidState
- 区块链-网络安全的未来
- 【字典树】字典树的创建(入门详细介绍)
- 网站不加“www”无法访问怎么解决?
- kingcms常用标记
- 淘宝爬虫实战---requests库实现模拟登陆模块
- 百度地图电子围栏判断
- 阿里CEO张勇认为程序员不应限制年龄