`
wanglu271991027
  • 浏览: 90965 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

生成分页SQL的方法,支持MSSQLSRVER2000和MYSQL DB2 ORACLE

 
阅读更多

1.生成分页SQL的方法,支持MSSQLSRVER2000和MYSQL DB2 ORACLE
public static String getQuery(int rownum,int pagesize,int pagenum,String Fromsql,Object[] Orders,Object[] Descs,int DbType){
	String orderby1 = "";
	String orderby2 ="";
	if(Orders!=null&&Descs!=null)
	for (int i = 0; i < Orders.length; i++) {
		String order = Orders[i]==null?null:((String)Orders[i]);
		boolean desc = Descs[i]==null?null:((Boolean)Descs[i]);
		if(StringUtils.isNotBlank(order)){
			if(StringUtils.isNotBlank(orderby1)){
				orderby1 = orderby1+",";
				orderby2 = orderby2+",";
			}
			orderby1 = order+" "+(desc?"desc":"asc")+" ";
			orderby2 = order+" "+(desc?"asc":"desc")+" ";
		}
	}
	log.debug("pagesize="+pagesize+":pagenum="+pagenum);
	//MYSQL:SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10
	//SQLSERVER:SELECT TOP "+pagesize+" * FROM ( SELECT TOP "+(pagesize*pagenum)+" "+Fromsql+" ORDER BY "+orderby1+" ) as tempTable   ORDER BY "+orderby2
	//DB2: SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER() AS RN FROM (SELECT * FROM <TABLE_NAME>) AS B)AS A WHERE A.RN BETWEEN <START_NUMBER> AND <END_NUMBER>;
	//select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid  from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage
	//SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 )WHERE RN >= 21
	if(DbType==IDb.DB_MYSQL){
		return "SELECT "+Fromsql+" "+(StringUtils.isBlank(orderby1)?"":" ORDER BY "+orderby1)+" LIMIT "+((pagenum-1)*pagesize)+", "+pagesize;
	}else if(DbType==IDb.DB_SQLSERVER){//解决MSSQL2000最后一页显示数据过多的问题
		int topnum = pagesize*pagenum;
		int p = pagesize;
		if(topnum>rownum){
			p = pagesize-(topnum-rownum);
		}
		return "select * from (select top "+p+" * from (SELECT TOP "+pagesize+" * FROM ( SELECT TOP "+(pagesize*pagenum)+" "+Fromsql+" "+(StringUtils.isBlank(orderby1)?"":" ORDER BY "+orderby1)+" ) as tempTable  "+(StringUtils.isBlank(orderby2)?"":" ORDER BY "+orderby2)+") as tmp) as tmp2 "+(StringUtils.isBlank(orderby1)?"":" ORDER BY "+orderby1)+" ";
	}else if(DbType==IDb.DB_DB2){
		return "SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER() AS RN FROM (SELECT "+Fromsql+" "+(StringUtils.isBlank(orderby1)?"":" ORDER BY "+orderby1)+") AS B)AS A WHERE A.RN BETWEEN "+((pagenum-1)*pagesize)+" AND "+pagesize*pagenum;
	}else if(DbType==IDb.DB_ORACLE){
		return "SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT  "+Fromsql+" "+(StringUtils.isBlank(orderby1)?"":" ORDER BY "+orderby1)+") A WHERE ROWNUM <= "+(pagesize*pagenum)+" ) WHERE RN >= "+((pagenum-1)*pagesize);
	}
	return null;
}
分享到:
评论

相关推荐

    Oracle,mysql,sqlserver等各种数据库的分页方法

    本文将详细介绍Oracle、MySQL、SQL Server等常见数据库系统的分页方法。 ### MySQL分页方法 #### 1. 使用`LIMIT`子句 MySQL提供了`LIMIT`子句来实现分页查询。该子句可以接受两个参数:第一个参数为起始行号...

    常用数据库sql分页

    常见的数据库管理系统包括MySQL、SQL Server、Oracle、DB2等,每种数据库管理系统都有其特有的分页机制和语法。 MySQL分页 MySQL的分页语句使用LIMIT关键字,语法为: ```sql SELECT * FROM table_name LIMIT ...

    数据库分页查询整理(oracle、mysql、SqlServer、access、db2等)

    不同的数据库管理系统(DBMS)有不同的分页查询语句,下面对 Oracle、DB2、SQL Server、MySQL、Access 等数据库的分页查询语句进行了整理。 SQL Server 分页查询 SQL Server 中有两种分页查询方法: 1. 第一种...

    数据库分页SQL

    常用数据库分页sql(),1.oracle数据库分页;2.DB2数据库分页;3.SQL Server 2000数据库分页;4.SQL Server 2005数据库分页5.MySQL数据库分页

    DB2、ORACLE SQL写法的主要区别

    DB2、ORACLE SQL写法的主要区别 1、数据类型转换函数 2、Where条件弱类型判断 3、replace关键字 4、子查询别名 5、DATE数据类型的区别 6、分页的处理 7、decode函数 8、NVL函数 9、substr的不同 10、获取操作系统...

    各数据库分页语法支持

    不同的数据库系统提供了不同的分页机制,本文将详细介绍几种常见数据库(Oracle、DB2、SQL Server、PostgreSQL)的分页语法支持,并给出具体的示例。 #### Oracle 数据库分页 Oracle 支持多种分页方式,包括三层...

    oracle、mysql数据库分页

    除了Oracle和MySQL之外,还有其他数据库系统也支持分页查询,如SQL Server和DB2等。 **1. SQL Server:** - 使用`TOP`关键字和`NOT IN`子句实现分页。 - 示例代码: ```sql SELECT TOP @pagesize * FROM ...

    oracle、mysql数据库分页.pdf

    在Oracle、MySQL、SQL Server和DB2等不同的数据库系统中,分页实现方式有所不同。以下是对这些数据库分页策略的详细说明: 1. Oracle数据库分页: Oracle使用`ROWNUM`伪列进行分页。基本思路是先通过子查询获取所有...

    DevPager 多功能支持长文章分页控件 v1.0 Beta.rar

    支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本 控件支持不...

    数据库分页SQL语句.pdf

    下面我们将从三个方面来讨论数据库分页技术:SQL Server、Oracle 和 MySQL。 SQL Server 在 SQL Server 中,我们可以使用 TOP 关键字来实现分页技术。TOP 关键字可以指定要检索的记录数。例如,从数据库表中检索从...

    数据库分页SQL语句.docx

    以下将详细介绍SQL Server、Oracle、MySQL以及DB2这四种数据库系统中的分页查询方法。 1. SQL Server: 在SQL Server中,我们可以使用`TOP`关键字来实现分页。如果需要从第M条记录开始取N条记录,可以使用如下的...

    oracle、mysql数据库分页借鉴.pdf

    本文将详细介绍Oracle、MySQL、SQL Server和DB2这四种常见数据库的分页实现方案。 1. Oracle数据库分页: Oracle采用的是ROWNUM伪列,通过嵌套查询来实现分页。以下是一个示例: ```sql select * from ( select ...

    oracle、mysql数据库分页参照.pdf

    以下是针对Oracle、MySQL、SQL Server和DB2这四种常见数据库系统的分页实现方案的详细说明: 1. Oracle数据库: Oracle采用的是ROWNUM伪列来实现分页。以下是一个基本的分页查询示例: ```sql SELECT * FROM ( ...

    mybatis-sql-dialect

    例如,MySQL支持`LIMIT`子句进行分页查询,而Oracle则使用`ROWNUM`和子查询。MyBatis-SQL-Dialect包解决了这些问题,为每种数据库提供定制的SQL支持。 3. **MySQL方言** 在MySQL中,MyBatis-SQL-Dialect会处理如`...

    数据库分页大全及示例

    1. **参数化查询**:在请求中包含当前页码和每页记录数,后端根据这些参数构造分页SQL语句。 2. **使用存储过程**:在数据库中创建存储过程,接收页码和每页大小作为输入参数,返回分页后的数据。 3. **ORM框架支持*...

    漂亮好用的分页控件源码

    支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...

    DevPager Beta 1.0 多功能支持长文章分页控件.rar

    支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...

    Asp.Net DevPager Beta 1.0 多功能支持长文章分页控件

    支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...

    SpringBoot集成MyBatis-Plus实现国产数据库适配.docx

    * 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库 * 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢...

    SocanCode7.4.1

    支持Access,SqlServer,MySql,Oracle,SQLite,Sybase,DB2,PostgreSql连接 全模板化的代码生成器,轻松修改即可实现自定义各种编程语言模板、支持代码批量输出 内置一套强大的C#三层架构模板,此模板支持生成简单三层及...

Global site tag (gtag.js) - Google Analytics