Mysql给查询的结果添加序号
需求:报表输出时要求有一个项次列,以在表格文档中表示出这是第几条数据
可以在使用sql查询时就给查询结果添加上序号,这样在导出报表时只需要直接将数据传给相应的方法即可,具体sql语句如下:
SELECT CAST((@i:=@i+1) AS INT) "序号", tc.CC_Name,tc.CC_Contact,tc.CC_Tel,tc.CC_Date
FROM (select @i:=0) j,tbl_casecontrol tc
在navicat上执行后的结果:
这里加上CAST(expr AS type)函数是因为mysql会把@i:=@i+1得到的数据认为是double类型,在导出报表的时候项次就会变成1.0、2.0、3.0…,加上cats转为int类型就可以解决此问题。
参考博客:https://blog.csdn.net/qq_43082131/article/details/88977194
Space is not allowed after parameter prefix ‘:’
虽然上面sql语句已经写成,并且运行出正确结果,但是当把sql语句放入hibernate环境中就出现了Space is not allowed after parameter prefix ':'的异常,
异常原因是hibernate无法识别":=",我想原因大概是hibernate会把:后面所带的东西看做是一个占位符,通常会使用类似“ and tc.cc_area = :ccArea”这样的语句表示ccArea是一个占位符,但当“:”后面跟随了“=”时,hibernate就无法识别了,据说这是hibernate3.X包之下的一个bug,在hibernate4.X中已经修复。
解决方法:在:前面加上\\进行转义
最终在java中的代码:
StringBuilder sql = new StringBuilder();
sql.append(" SELECT CAST((@i\\:=@i+1) AS INT) \"序号\", tc.CC_Name,tc.CC_Contact,tc.CC_Tel,tc.CC_Date,tc.CC_Content, \n ");
sql.append(" FROM (select @i\\:=0) j,tbl_casecontrol tc \n ");
参考博客:https://my.oschina.net/pipimao/blog/1842196 https://www.cnblogs.com/siashan/p/4313761.html
此外,参考博客中所提到的/*/:=/*/方法在我这边好像并不可行。