SQL查询结果添加序号以及Space is not allowed after parameter prefix ‘:‘异常处理

Mysql给查询的结果添加序号

需求:报表输出时要求有一个项次列,以在表格文档中表示出这是第几条数据

image-20200817135705305

可以在使用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
此外,参考博客中所提到的/*/:=/*/方法在我这边好像并不可行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值