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、SQL Server等常见数据库系统的分页方法。 ### MySQL分页方法 #### 1. 使用`LIMIT`子句 MySQL提供了`LIMIT`子句来实现分页查询。该子句可以接受两个参数:第一个参数为起始行号...
常见的数据库管理系统包括MySQL、SQL Server、Oracle、DB2等,每种数据库管理系统都有其特有的分页机制和语法。 MySQL分页 MySQL的分页语句使用LIMIT关键字,语法为: ```sql SELECT * FROM table_name LIMIT ...
不同的数据库管理系统(DBMS)有不同的分页查询语句,下面对 Oracle、DB2、SQL Server、MySQL、Access 等数据库的分页查询语句进行了整理。 SQL Server 分页查询 SQL Server 中有两种分页查询方法: 1. 第一种...
常用数据库分页sql(),1.oracle数据库分页;2.DB2数据库分页;3.SQL Server 2000数据库分页;4.SQL Server 2005数据库分页5.MySQL数据库分页
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之外,还有其他数据库系统也支持分页查询,如SQL Server和DB2等。 **1. SQL Server:** - 使用`TOP`关键字和`NOT IN`子句实现分页。 - 示例代码: ```sql SELECT TOP @pagesize * FROM ...
在Oracle、MySQL、SQL Server和DB2等不同的数据库系统中,分页实现方式有所不同。以下是对这些数据库分页策略的详细说明: 1. Oracle数据库分页: Oracle使用`ROWNUM`伪列进行分页。基本思路是先通过子查询获取所有...
支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本 控件支持不...
下面我们将从三个方面来讨论数据库分页技术:SQL Server、Oracle 和 MySQL。 SQL Server 在 SQL Server 中,我们可以使用 TOP 关键字来实现分页技术。TOP 关键字可以指定要检索的记录数。例如,从数据库表中检索从...
以下将详细介绍SQL Server、Oracle、MySQL以及DB2这四种数据库系统中的分页查询方法。 1. SQL Server: 在SQL Server中,我们可以使用`TOP`关键字来实现分页。如果需要从第M条记录开始取N条记录,可以使用如下的...
本文将详细介绍Oracle、MySQL、SQL Server和DB2这四种常见数据库的分页实现方案。 1. Oracle数据库分页: Oracle采用的是ROWNUM伪列,通过嵌套查询来实现分页。以下是一个示例: ```sql select * from ( select ...
以下是针对Oracle、MySQL、SQL Server和DB2这四种常见数据库系统的分页实现方案的详细说明: 1. Oracle数据库: Oracle采用的是ROWNUM伪列来实现分页。以下是一个基本的分页查询示例: ```sql SELECT * FROM ( ...
例如,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 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...
支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...
支持长文章分页/Access/Sql2000/Oracle/MySql/DB2/存储过程/支持不产生ViewState/图片分页/URL重写/Xml 样式自己用CSS定,可以随意改!对于Web2.0 页面构架师来说,追求代码完美,也许这是你最好的选择~,本控件支持不...
支持Access,SqlServer,MySql,Oracle,SQLite,Sybase,DB2,PostgreSql连接 全模板化的代码生成器,轻松修改即可实现自定义各种编程语言模板、支持代码批量输出 内置一套强大的C#三层架构模板,此模板支持生成简单三层及...
* 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库 * 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢...