/**
* @通用分页生成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分页存储过程,提供12参数可供选择。其中,提供两种分页方案被选择和相关排序方式,支持自定义查询、自定义排序等
"VS2005通用SQL分页控件"就是为了解决这个问题而设计的。它允许开发者在Visual Studio 2005环境下,实现高效、便捷的数据库分页功能,提升应用程序的性能,同时改善用户在浏览大量数据时的体验。 该控件的核心功能...
通用的分页sql语句 select top (分页大小) * from tableName where id[主键] not in (select top(分页大小*(当前页-1)) id from tableName)
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。
有多种方法可以实现SQL分页,其中包括使用EJB的Find方法、将所有记录一次性加载到内存中、每次查询一页数据、缓存部分结果以及各种缓存机制。然而,本文重点介绍一种基于子查询的分页技术,它无需额外的数据库支持,...
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
通用SQL 分页存储过程 其中一种是拼接字符串
使用SQL语句实现通用分页查询,支持模糊查询等。
比较通用的sql分页存储过程存储过程 比较通用的sql分页存储过程存储过程
SQL 通用 分页 存储 过程 完整代码
本文将深入探讨通用的存储过程SQL分页查询语句及其背后的原理。 首先,理解存储过程。存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全...
SQL语句的分页通用代码实现是将数据集分割成多个部分,每次只加载一部分(即一页)到前端进行显示。这种方式在大数据量的查询中尤为重要,因为它避免了一次性加载所有数据可能导致的性能问题。 标题中的“sql语句写...
本篇将深入讲解SQL分页查询的原理,并结合示例进行详细说明。 首先,让我们了解基本的SQL分页查询方法。在SQL Server中,我们可以利用`TOP`关键字来限制返回的行数,从而实现分页。假设我们有一个名为`Student`的表...
### 几款通用的SQL分页存储过程:深入解析与应用 在数据库操作中,分页查询是一项常见的需求,尤其当数据量庞大时,合理的分页可以极大地提高查询效率和用户体验。本文将深入分析两款通用的SQL分页存储过程,分别...
Java 通用分页详解 Java 通用分页是指在Java编程中对大量数据进行分页处理,以提高系统效率和性能。下面对Java通用分页的知识点进行详细说明: 1. 分页的必要性 在实际项目中,数据量可能非常大,直接查询所有...
sql 分页 针对oracle mysql sqlserver 等数据库的通用类
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
本文将基于提供的SQL分页存储过程,详细介绍其工作原理及实现细节。 #### 二、存储过程概述 此存储过程名为`PAGINATION_JHGL`,主要功能是根据传入的参数实现对数据库表中的数据进行分页查询。下面我们将逐一分析...
### SQL Server 的通用分页显示存储过程 #### 知识点概述 在现代Web应用程序开发中,分页是一项重要的功能,它能够有效地管理和展示大量数据,提升用户体验并优化服务器资源的利用。传统的分页方法,如ADO记录集...