`
jinwanmeng
  • 浏览: 7520 次
  • 性别: 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获得的还是第一次保留下来的列名。

分享到:
评论

相关推荐

    ibatis.util包

    在Java开发领域,Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在配置文件中,从而简化了数据访问层的实现。`ibatis.util`包是Ibatis框架的一部分,提供了很多实用工具类,帮助开发者更好地进行...

    ibatis实现增删改查功能demo

    此外,Ibatis支持动态SQL,使得查询条件可以根据业务需求灵活变化。 3. **多参数传递**: 在Ibatis中,如果一个方法需要接收多个参数,可以使用@Param注解为每个参数命名,然后在SQL语句中通过占位符引用它们。...

    ibatis 支持枚举类型

    在Java开发中,Ibatis作为一个轻量级的持久层框架,深受开发者喜爱。它通过XML或注解方式配置和映射SQL,简化了数据库操作。然而,在实际开发中,我们经常遇到枚举类型的需求,例如在数据库字段中存储状态、性别等...

    ibatis.net Tutorial 指导 用法

    Ibatis提供了诸如`SqlException`、`DataAccessException`等异常,便于捕获和处理数据库操作中的错误。 ## 总结 Ibatis.net 提供了一个简洁而强大的方式来处理数据库操作,通过SQL映射文件和映射器接口,实现了SQL与...

    ibatis + oracle 增删改查例子

    `iBatis`是一个优秀的持久层框架,它使得Java开发者能够方便地将SQL语句与Java代码相结合,实现灵活的数据访问。而`Oracle`作为一款功能强大的关系型数据库管理系统,广泛应用于大型企业级应用。本示例“ibatis + ...

    springmybatis

    其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...

    springboot--mybatis枚举自动转换实现.rar

    import java.sql.SQLException; public class GenderTypeHandler extends BaseTypeHandler&lt;Gender&gt; { @Override public void setNonNullParameter(PreparedStatement ps, int i, Gender parameter, JdbcType ...

    mybatis中实现枚举自动转换方法详解

    在MyBatis中,枚举类型的自动转换是一个常见的需求,特别是在处理数据库字段与Java枚举类型之间转换时。本文将详细介绍如何在MyBatis中实现枚举的自动转换,以便在查询结果返回时能直接得到对应的枚举实例,无需额外...

    ibatis3 GA javadoc

    在Java开发领域,iBatis作为一个优秀的持久层框架,因其灵活的数据映射和SQL定制能力而深受开发者喜爱。iBatis3 GA(General Availability)版本是其稳定且广泛使用的版本,而Javadoc API则是开发者理解和使用iBatis...

    ibatis自定义数据类型在不支持中文的数据库存储汉字

    `iBatis`是Java领域中广泛使用的SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,与Java代码解耦,提高了开发效率。当遇到不支持中文的数据库时,`iBatis`的自定义数据类型功能就显得尤为重要。 首先,我们...

    mybatis入门之级联1对1(无延迟加载)

    MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者Mapper接口的方法注解中,大大提升了开发效率和灵活性。 首先,我们来理解一下“级联1对1关联”。在数据库设计中,1对1关联是指两个...

    mybatis 对clob类型转换

    创建一个实现`org.apache.ibatis.type.TypeHandler`接口的类,重写`setParameter`和`getResult`方法,确保在SQL语句执行前能将Java对象转换为CLOB,执行后又能从CLOB还原为原始数据。 2. **配置MyBatis** 在...

    mybatis自定义类型处理器TypehHandler示例详解

    import java.sql.SQLException; public class MyTypeHandle implements TypeHandler&lt;String&gt; { private static final String KEY = "123456"; @Override public void setParameter(PreparedStatement ...

    mybatis通用MapperUUID简单示例共3页.pd

    MyBatis通用Mapper是MyBatis框架的一个扩展,它极大地简化了常见的CRUD操作,使得开发者无需编写大量的SQL映射代码。在本示例中,我们聚焦于如何使用通用Mapper处理UUID类型的主键,以此来增强数据库操作的灵活性...

    1.springbood+mybatis项目demo2.mybatis自定义枚举类型的转换器以及各种使用场景

    在开发Java Web应用程序时,Spring Boot和MyBatis是两个非常流行的技术框架。Spring Boot简化了项目的初始化和配置,而MyBatis则提供了一个灵活的持久层解决方案。本项目示例"1.springboot+mybatis项目demo2.mybatis...

    SqlMapClient对象.pdf

    总之,SqlMapClient是iBatis框架中进行数据库操作的关键组件,它提供了一种灵活的方式将Java对象与SQL语句关联,实现了数据访问层的封装。通过合理的配置和使用,开发者可以高效、安全地进行数据库操作。

    MyBatis中如何优雅的使用枚举详解

    于设置非空参数,我们将根据枚举的code字段设置参数;T getNullableResult(ResultSet rs, String columnName) 用于从结果集中获取可为空的结果并转换为枚举;T getNullableResult(ResultSet rs, int columnIndex) 和...

    3、mybatis类型的定义方式

    类型处理器的作用在于,当SQL查询执行后,数据库返回的结果会被类型处理器转换为Java对象,反之,当执行插入、更新等操作时,Java对象的属性值也会通过类型处理器转化为数据库能识别的格式。 1. **内置类型处理器**...

    JdbcTemplateTool.zip

    Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...

Global site tag (gtag.js) - Google Analytics