解决iBATIS动态改变查询字段出现“java.sql.SQLException: 列名无效” 错误的方法

本文介绍在使用iBatis进行动态SQL查询时遇到的列名冲突问题及解决方案。当查询列名动态变化时,可能导致列名重复,进而引发查询错误。通过设置remapResults参数为true,可以让iBatis在每次查询时重新映射列名,避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://jaykuen.iteye.com/blog/852086

Xml代码
<select id="XX" resultClass="java.util.HashMap" parameterClass="java.util.HashMap" >
select yyyymmdd,
<isNotEmpty prepend=" " property="user_type">
<isEqual property="x" compareValue="1">
a
</isEqual>
<isEqual property="x" compareValue="2">
b
</isEqual>
</isNotEmpty>

<select id="XX" resultClass="java.util.HashMap" parameterClass="java.util.HashMap" >
select yyyymmdd,
<isNotEmpty prepend=" " property="user_type">
<isEqual property="x" compareValue="1">
a
</isEqual>
<isEqual property="x" compareValue="2">
b
</isEqual>
</isNotEmpty>

当x=1查询的时候列名是a, 如果第一次查询x=1,那么第二次查询x=2就会报这个错,因为ibatis保留列名为第一次查询时候的列名a,ibatis可以设置一个参数remapResults="true",每次查询都重新更新列名,

Xml代码
<select id="XX" resultClass="java.util.HashMap" parameterClass="java.util.HashMap" remapResults="true"

<select id="XX" resultClass="java.util.HashMap" parameterClass="java.util.HashMap" remapResults="true" 当出现如上的动态改变查询列,或者其他方式动态改变的时候,都需要设置remapResults="true"这个属性,因此不至于出现“列名无效”的错误。

其实,这个错误抛出的地方是resultSet.getString(“xx”);方法,因为iBATIS保留了第一次的列名,所以第二次查询的时候resultSet获得的还是第一次保留下来的列名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值