`
hejiaqi789
  • 浏览: 29862 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

通用sql分页

    博客分类:
  • sql
 
阅读更多
        /**
	 * @通用分页生成sql语句
	 * @param sql			要查询的sql语句
	 * @param pageNum		查询的页码(第几页)
	 * @param pageSize		每页显示条数
	 * @param orderKey		排序字段名(此项必须有要么程序默认为ID排序)
	 * @param order			排序类型(desc,asc)
	 * @return 生成后分页的sql
	 */
	public static String fomartPageSql(String sql,int pageNum,int pageSize,String orderKey[],String order[]){
		String desc = " DESC";
		String asc = " ASC";
		String orderR[] = null;
		if(order!=null){
			orderR = new String[order.length];
			for(int i = 0;i<order.length;i++){
				if("DESC".equals(order[i].toUpperCase().trim())){
					orderR[i] = "ASC";
				}else if("ASC".equals(order[i].toUpperCase().trim())){
					orderR[i] = "DESC";
				}
			}
			
		}
		StringBuffer orderByB = new StringBuffer();
		StringBuffer orderByAD = new StringBuffer();
		//判断是否有排序字段
		if(orderKey!=null){
			//有排序字段
			if(order!=null&&orderR!=null&&orderKey.length==order.length){
				for(int i=0;i<orderKey.length;i++){
					if(i==0){
						orderByB.append(orderKey[i]).append(" ").append(orderR[i]);
						orderByAD.append(orderKey[i]).append(" ").append(order[i]);
					}else{
						orderByB.append(",").append(orderKey[i]).append(" ").append(orderR[i]);
						orderByAD.append(",").append(orderKey[i]).append(" ").append(order[i]);
					}
					
				}
			}else{
				//没有排序类型或与排序字段长度不对应
				//默认升序排列
				for(int i=0;i<orderKey.length;i++){
					if(i==0){
						orderByB.append(orderKey[i]).append(desc);
						orderByAD.append(orderKey[i]).append(asc);
					}else{
						orderByB.append(",").append(orderKey[i]).append(desc);
						orderByAD.append(",").append(orderKey[i]).append(asc);
					}
				}
			}
		}else{
			//默认为ID排序
			orderByB.append("ID").append(desc);
			orderByAD.append("ID").append(asc);
		}
		
		StringBuffer resultSql = new StringBuffer();
		resultSql.append("select * from( select");
		resultSql.append(" top (case when (").append(pageNum*pageSize);
		resultSql.append(" )>(select count(*) from (");
		resultSql.append(sql);
		resultSql.append(" ) as conts) then (");
		resultSql.append(" case when (");
		//----------------此处防止top为负数-------------
		resultSql.append("(select count(*) from (");
		resultSql.append(sql);
		resultSql.append(" ) as conts)-");
		resultSql.append((pageNum-1)*pageSize);
		resultSql.append(")>0 then (");
		resultSql.append("(select count(*) from (");
		resultSql.append(sql);
		resultSql.append(" ) as conts)-");
		resultSql.append((pageNum-1)*pageSize);
		resultSql.append(" ) else 0 end ");
		//-------------------------------------
		resultSql.append(" ) else ");
		resultSql.append(pageSize);
		resultSql.append(" end) * from (");
		resultSql.append("select top(");
		resultSql.append(pageNum*pageSize);
		resultSql.append(")* from (");
		resultSql.append(" select top(");
		resultSql.append(pageNum*pageSize);
		resultSql.append(" )* from ( ");
		resultSql.append(sql);
		resultSql.append(" ) as pageTableA");
		if(!"".equals(orderByAD.toString().trim())){
			resultSql.append(" order by ").append(orderByAD);
		}
		resultSql.append(" ) as pageTableB");
		if(!"".equals(orderByB.toString().trim())){
			resultSql.append(" order by ").append(orderByB);
		}
		resultSql.append(" ) as pageTableC");
		resultSql.append(" ) as pageTableD");
		if(!"".equals(orderByAD.toString().trim())){
			resultSql.append(" order by ").append(orderByAD);
		}
		return resultSql.toString();
	}/**
	 * @测试代码
	 */
	public static void main(String[] args) {
		String sql = "分页的sql语句";
		int pageNum = 页码;
		int pageSize = 显示条数;
		String orderKey[] = {"排序字段"};
		String order[] = {"排序类型"};//如果有排序类型应该与排序字段一一对应。如果没有程序默认升序
		
		System.out.println(fomartPageSql(sql, pageNum, pageSize, orderKey, null));
	}

 

注意:如果不写字段,表里要有ID字段。在程序中默认认为不写排序字段将按ID排序。

 

分享到:
评论

相关推荐

    通用Sql分页存储过程

    通用sql分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等

    VS2005通用SQl分页控件

    "VS2005通用SQL分页控件"就是为了解决这个问题而设计的。它允许开发者在Visual Studio 2005环境下,实现高效、便捷的数据库分页功能,提升应用程序的性能,同时改善用户在浏览大量数据时的体验。 该控件的核心功能...

    通用分页sql

    通用的分页sql语句 select top (分页大小) * from tableName where id[主键] not in (select top(分页大小*(当前页-1)) id from tableName)

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    sql server 2008通用分页

    SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。

    利用标准的SQL语句实现查询记录分页

    有多种方法可以实现SQL分页,其中包括使用EJB的Find方法、将所有记录一次性加载到内存中、每次查询一页数据、缓存部分结果以及各种缓存机制。然而,本文重点介绍一种基于子查询的分页技术,它无需额外的数据库支持,...

    Sql Server 通用分页存储过程(适用与 BootStrap Table)

    通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    SQL高级应用(通用分页存储)

    通用SQL 分页存储过程 其中一种是拼接字符串

    使用SQL语句实现通用分页查询

    使用SQL语句实现通用分页查询,支持模糊查询等。

    比较通用的sql分页存储过程

    比较通用的sql分页存储过程存储过程 比较通用的sql分页存储过程存储过程

    SQL通用分页存储过程完整代码

    SQL 通用 分页 存储 过程 完整代码

    通用的存储过程sql分页查询语句

    本文将深入探讨通用的存储过程SQL分页查询语句及其背后的原理。 首先,理解存储过程。存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全...

    sql语句写分页通用代码

    SQL语句的分页通用代码实现是将数据集分割成多个部分,每次只加载一部分(即一页)到前端进行显示。这种方式在大数据量的查询中尤为重要,因为它避免了一次性加载所有数据可能导致的性能问题。 标题中的“sql语句写...

    SQL分页查询原理讲解

    本篇将深入讲解SQL分页查询的原理,并结合示例进行详细说明。 首先,让我们了解基本的SQL分页查询方法。在SQL Server中,我们可以利用`TOP`关键字来限制返回的行数,从而实现分页。假设我们有一个名为`Student`的表...

    几款通用的sql分页存储过程

    ### 几款通用的SQL分页存储过程:深入解析与应用 在数据库操作中,分页查询是一项常见的需求,尤其当数据量庞大时,合理的分页可以极大地提高查询效率和用户体验。本文将深入分析两款通用的SQL分页存储过程,分别...

    java 通用分页 java 通用分页

    Java 通用分页详解 Java 通用分页是指在Java编程中对大量数据进行分页处理,以提高系统效率和性能。下面对Java通用分页的知识点进行详细说明: 1. 分页的必要性 在实际项目中,数据量可能非常大,直接查询所有...

    sql 分页 oracle mysql sqlserver

    sql 分页 针对oracle mysql sqlserver 等数据库的通用类

    Sql Server 通用分页存储过程(BootStrap Table)

    Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    分页(sql分页基本上通用,条件和想要显示的内容只要在外边加上就可以了)

    本文将基于提供的SQL分页存储过程,详细介绍其工作原理及实现细节。 #### 二、存储过程概述 此存储过程名为`PAGINATION_JHGL`,主要功能是根据传入的参数实现对数据库表中的数据进行分页查询。下面我们将逐一分析...

    SQL Server 的通用分页显示存储过程

    ### SQL Server 的通用分页显示存储过程 #### 知识点概述 在现代Web应用程序开发中,分页是一项重要的功能,它能够有效地管理和展示大量数据,提升用户体验并优化服务器资源的利用。传统的分页方法,如ADO记录集...

Global site tag (gtag.js) - Google Analytics