`
shendixiong
  • 浏览: 394547 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

mysql 实现oracle中的rownum

阅读更多

在mysql中并没有类似oracle中的rownum。可有的时候,我们需要获取对应的行数获取来进行相关排序、

实现方法

第一步:

SELECT @rownum:=0    from tableName t

 rownum 其意思等同于声明一个变量名(所以可以任意修改),并赋初始值为0!

 

但是这样的运行结果都是等于0,所以必须用到自增才型

所以需要结合,故

第二步(自增)

select @rownum := @rownum+1 from (SELECT @rownum:=0    from tableName t) t

 就可以实现oracle中的rownum

 

 非常感谢 lwpan 的评论。他所说的问题的确存在。如果直接运行上面的SQL语句是会报

Space is not allowed after parameter prefix ':' 异常。

该异常是因为hibernate的jar在4.0以下版本bug导致,4.0以上是没问题的。可以参考

https://hibernate.atlassian.net/browse/HHH-2697

 

解决办法如下:

 1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现!下面是个简单的样例

public List<Object[]> jdbcQuery(final String sql) {
		return (List<Object[]>) getHibernateTemplate().execute(new HibernateCallback() {
			
			@Override
			public Object doInHibernate(Session session) throws HibernateException,
					SQLException {
				 Connection con = session.connection();      
                           PreparedStatement ps = con.prepareStatement(sql);   
                           ResultSet rs = ps.executeQuery();   
                           String sort = null;
                           String building_id = null;
                           int rowNum = 0;
                           List<Object[]> list = new ArrayList<Object[]>();
                           Object[] obj = null;
                         while(rs.next()){ 
                	   obj = new Object[1];
                	   rowNum = rs.getInt("rownum");
                	   obj[0] = rowNum ;
                	   list.add(obj);
                         }      
                          rs.close();      
                          ps.close();      
                          session.flush();      
                          session.close();
			  return list;
			}
		});
	}

 

 

2
6
分享到:
评论
4 楼 cuishuangjia 2013-10-07  
http://cuishuangjia.iteye.com/blog/1934659
提供单体测试,结合测试解决方案。
性能优化。
DbTools工具下载:
http://cuishuangjia.iteye.com/
支持ORACLE,MYSQL,SQLSERVER,POSTGRE,DB2数据库相互转换功能

功能:
1。将数据库中的表结构和数据保存到EXCEL中。
2。将EXCEL中的数据,同步到数据库中。
3。当表结构发生变化时,数据不会丢失。
4。根据EXCEL中的表结构,生成建表语句SQL文。
5。多用户使用该软件时,可以随时记录某个用户对数据库的操作。
6。可以为进行压力测试,自动生成数据。
7。导出表结构,根据表结构和数据库中的表结构进行差分。
8。导出DB结构,和现有环境DB进行表结构差分
9。导出用户自定义表结构,根据表结构导入,导入数据前对EXCEL校验进行数据库验证和业务逻辑验证
10。单体测试,结合测试解决方案。
亲,请将5个压缩文件全部下载后,将5个压缩包解压后,将解压后的5个rar文件放入同一文件件下,再解压。
作者邮件:cuishuangjia@gmail.com
企鹅群:数据库第三方工具交流  184715368
3 楼 lwpan 2013-09-25  
shendixiong 写道
lwpan 写道
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;


的确是有这个问题,我想我忘记把这个问题说明下了。非常感谢,其实这个也有办法解决:

1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现



总结的很好! 我直接用arraylist装起来 然后算出排序 个人觉得还是蛮简单的方法  方法1,2几乎不用不用考虑 jar包还是不要随意替换 以免影响了已有功能,
2 楼 shendixiong 2013-09-24  
lwpan 写道
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;


的确是有这个问题,我想我忘记把这个问题说明下了。非常感谢,其实这个也有办法解决:

1.你所说的hibernate的bug的确存在,但是在4.0以下的版本,所以可以升级hibernate的jar !这点要说明下。其原理您也可以看看这篇文章
https://hibernate.atlassian.net/browse/HHH-2697
2.在网站上有多种解决办法,包括转义,函数,存储过程。其中转义是不可行,函数和存储过程是可以的.
3.以上2种办法虽然都可以解决,但都有很大弊端,第一种,一个项目一般不会因为你一个功能点而去升级一个jar,并且还要考虑到稳定 ,兼容等因素。
第二种,相对于来说好用点,但是,编写函数,存储过程的脚本有时候要给予数据库管理员,这个也麻烦点。
我想说的第三种办法是用hibernate的jdbc去查询,就可以实现
1 楼 lwpan 2013-09-23  
我的排行榜   之前做这个功能的时候用过这个 后来放弃了这样使用   hibernate的bug  使用原生createSqlQuery是没法执行的  使用ArrayList计算出我的位置 通过userId比较即可;

相关推荐

    sql语句中select top n与oracle的rownum与mysql的limit用法

    sql语句中select top n与oracle的rownum与mysql的limit 取前几条数据sql简单用法

    mysql类似oracle rownum写法实例详解

    在本篇文章里小编给大家分享的是关于mysql类似oracle rownum写法以及相关实例内容,需要的朋友们可以学习下。

    从mysql转换到oracle数据库.docx

    2. Limit:MySQL 中一般采用 `limit` 去实现分页功能,而 Oracle 中一般采用 `rownum` 去实现分页。 3. Date:两种数据库对日期的处理也不一样,MySQL 中更加灵活。 4. LEFT 函数:Oracle 中没有相同的函数,我们...

    Oracle中使用Rownum分页详细例子

    在MySQL中,我们通常都使用limit来完成数据集获取的分页操作,而在Oracle数据库中,并没有类似limit一样的方便方法来实现分页,因此我们通常都是直接在SQL语句中完成分页,这里就需要借助于rownum伪列或row_number()...

    mysql、sqlserver、oracle分页,java分页统一接口实现

    MySQL、SQL Server、Oracle 分页是关系数据库管理系统中最基本也是最常用的操作之一,而 Java 分页统一接口实现则是对数据库操作的抽象和封装。本文将对 MySQL、SQL Server、Oracle 分页的实现进行详细的介绍,并...

    mysql,sqlserver,oracle取前10条数据.docx

    mysql, sqlserver, oracle 取前 10 条数据的实现方法 在数据库查询中,取前 10 条数据是非常常见的操作,无论是在 mysql, sqlserver,还是 oracle 中,都是如此。在这里,我们将详细介绍在这三种数据库管理系统中...

    MySQL和Oracle的区别以及各自的特点

    相同点: 1.都是关系型数据库管理系统 2.都是目前很流行的数据库 不同点: 1.MySQL是轻量型数据库,并且免费,没有服务恢复数据。...MySQL用limit开始位置, 记录个数就可以实现分页,而Oracle则是需要用到伪列ROWNUM

    22面试数据库相关技术汇总1

    Oracle 中使用 ROWNUM 伪列来实现分页,例如: SELECT a.* FROM (SELECT ROWNUM rw, 列名 FROM 表 WHERE 条件) a WHERE a.rw &gt; x AND a.rw ; 这将从表中提取指定范围的记录。 二、索引技术 索引是数据库中的一种...

    Oracle与Mysql主键、索引及分页的区别小结

    区别: 1、主键,Oracle不可以实现自增,mysql可以实现自增。 oracle新建序列,SEQ_USER_Id.nextval 2、索引: mysql索引从0开始,Oracle从1开始。 3、分页, mysql: select * from user order by desc limit n ,m. ...

    将mysql转换到oracle必须了解的50件事

    另外他们列出的这些区别有些是蛮有意义的,有些可能由于他们...不过可以rownum虚列来实现,不过会更加麻烦. 2. Oracle不支持偏移(offset)语法. 3. Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置. 4. 对于多

    Oracle数据库学习指南

    8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE...

    mysql, oracle等常见数据库的分页实现方案

    1.Oracle:  select * from ( select row_.*, rownum rownum_ from ( query_SQL ) row_ where rownum == min  2.SQL Server:  select top @pagesize * from tablename where id not in (select top @pagesize*...

    浅析Oracle和Mysql分页的区别

    Mysql使用limit分页而Oracle使用rownum分页,下面通过本文给大家介绍Oracle和Mysql分页的区别,需要的的朋友参考下吧

    PHP实现的oracle分页函数实例

    主要介绍了PHP实现的oracle分页函数,结合实例形式分析了PHP针对oracle数据库使用rownum代替MySQL中limit实现的分页操作相关技巧,需要的朋友可以参考下

    Oracle使用MyBatis中RowBounds实现分页查询功能

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。 使用MyBatis中的RowBounds进行分页查询时,不需要在 sql 语句中写 offset,limit...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    Java Web分页技术与实现.pdf

    分页技术可以在Web服务器中或数据库服务器中实现。 在Web服务器中实现分页可以利用Displaytag标记库和Pager标记库, Displaytag标记库可以对Java Web应用的数据通过HTML表格进行分页和排序显示,同时它还支持数据的...

    简单了解mysql方言dialect

    拿分页来说,MySQL 的分页是用关键字 limit, 而 Oracle 用的是 ROWNUM,MSSQL 可能又是另一种分页方式。 # mysql select * from t_user limit 10; # oracle select * from t_user t where ROW

    MySQL rownumber SQL生成自增长序号使用介绍

    MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数。但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能

Global site tag (gtag.js) - Google Analytics