/**
* @通用分页生成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分页控件,附源码,例子。。支持两张表联合。
通用的分页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 Server分页程序,并且符合BootStrap Table 的调用标准.
通用SQL 分页存储过程 其中一种是拼接字符串
使用SQL语句实现通用分页查询,支持模糊查询等。
比较通用的sql分页存储过程存储过程 比较通用的sql分页存储过程存储过程
SQL 通用 分页 存储 过程 完整代码
通用的存储过程sql分页查询语句,节约您的时间....
在绝大多数的应用中,返回大量的符合条件的记录是司空见惯的,最典型的莫过于搜索了。在搜索的应用中,用户给出搜索条件,服务器查出符合条件的记录。...本文将为大家介绍如何利用标准的SQL语句实现查询记录分页。
sql 分页 针对oracle mysql sqlserver 等数据库的通用类
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
该分页主要是用sql在后台进行分页的,条件自己加。是一个写好的存储过程,有注释
对SQL分页的万能存储过程,很全面的分析和描述,请大家支持
通用的sql分布存储过程,相信不用我多说你懂的!
用三层组合而成的sql语句,前台调用时课配置每页行数和连接表名,查询时只查本页要显示的数据,是性能大大提高
非常通用的SQL分页及综合查询,效率特优!
SQL Server 2000下的通用分页存储过程.sql