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;
			}
		});
	}

猜你喜欢

转载自shendixiong.iteye.com/blog/1945736
今日推荐