java - 使用 Mybatis 和 ojdbc14.jar 为参数设置 null 时出错

标签 java mybatis ojdbc

将参数设置为 null 时出错。

此问题仅在使用 ojdbc14.jar 时出现。用ojdbc6.jar的时候就可以了。

我在mybatis配置xml中有这个设置

<settings>
    <setting name="jdbcTypeForNull" value="NULL"/>
</settings>

错误信息是:

Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull

xml中的sql是

<update id="rename" parameterType="Element">
    update dsb_element t set t.elementname = #{elementName} where t.elementid = #{elementId}
</update>

调用它的java是

 com.my.Element ele = new Element();
    ele.setElementId("some-id");
    ele.setElementName(null);
    sqlSession.update(getMyBatisId("rename"), element) ;

问题是:

是不是ojdbc14.jar的问题,如果是,为什么?

我知道我可以使用#{elementName, jdbcType=VARCHAR2} 来解决它,但是我的项目到处都有很多这样的问题,而且很快就会到期。我不想更改所有这些。

最佳答案

问题是,自 3.0.x 版本以来,空参数的默认 JDBC 类型是 Types.OTHER,某些 JDBC 驱动程序(如 Oracle 10g)不支持它。

Here解释这个问题的帖子。

我找到的解决方案很简单,我在配置文件中将jdbcTypeForNull设置为NULL

<configuration>
    <properties resource="mybatis-config.properties" />
    <settings>
        <setting name="jdbcTypeForNull" value="NULL" />
    </settings>

    <environments default="development">
    ....
    </environments>

    <mappers>
    ....
   </mappers>
</configuration>

关于java - 使用 Mybatis 和 ojdbc14.jar 为参数设置 null 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18427682/

相关文章:

java - 如何正确调用公开课

java - @Transactional Spring MyBatis 不工作

java - 如何使用mybatis按参数分组

java - 准备语句: Missing expression on single quote (ORA-00936)

java - 什么类转换为 GWT 中的 java 脚本?

java - ANT 可以更改 XML 文件中的值吗?

java - 将变量从一个 jframe 传递到另一个而不关闭它们

java - JDBC 查询缓存和预缓存

oracle - Sqoop导入作业报错org.kitesdk.data.ValidationException for Oracle

Java JDBC Oracle SQL 查询每隔几个月挂起一次