`
jinwanmeng
  • 浏览: 7184 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

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

阅读更多
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获得的还是第一次保留下来的列名。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics