【问题标题】:MyBatis inserting null to a DB2 DATE columnMyBatis 将空值插入 DB2 DATE 列
【发布时间】:2017-06-26 14:14:51
【问题描述】:

使用 MyBatis(版本 3.2.5)我正在尝试使用 NULL 更新 DB2 DATE 列,但得到以下错误

org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #5 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10281][10295] JDBC type 0 is not yet supported.
; uncategorized SQLException for SQL []; SQL state [null]; error code [-99999]; [ibm][db2][jcc][10281][10295] JDBC type 0 is not yet supported.; nested exception is com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10281][10295] JDBC type 0 is not yet supported.

我尝试了以下建议,但它们对我不起作用

MyBatis - jdbcTypeForNull Oracle

【问题讨论】:

    标签: db2 mybatis


    【解决方案1】:

    line 39 of BaseTypeHandler抛出异常。

    设置断点以检查jdbcType.TYPE_CODE 的当前值。当它等于 java.sql.Types.TIMESTAMP (93) 时应该可以正常工作,但可能不是这样。

    如果不是这样, this 的预期实际类型为 DateTypeHandler。 然后您可能必须定义自己的 DateTypeHandler,只需扩展它并从 BaseTypeHandler 覆盖方法 setParameter,实际上只需将变量 jdbcType.TYPE_CODE 替换为强制 java.sql.Types.TIMESTAMP。 要将其默认用于所有 Date 参数,请将其注册到 mybatis-config.xml(或 Spring)的 typeHandler 部分。否则在insert语句中设置相关参数的typeHandler属性。

    【讨论】:

    • 谢谢。我想出了导致问题的原因和解决方案
    • 当时是什么?
    • 我在下面发布了解决方案。
    【解决方案2】:

    找到了解决办法..

    在mybatis-config.xml中,我有

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

    我像下面这样改变了它。

    <configuration>
        <settings>
            <setting name="jdbcTypeForNull" value="DATE" />             
        </settings>    
    </configuration>
    

    【讨论】:

    • 我认为当您想将 null 传递给另一种类型的列时,这可能会导致问题。这是全局配置...您可以在设置参数时尝试更多地在本地处理问题:#{yourNullDateParam, jdbcType=DATE}
    • 这完全取决于需求和数据库设计。就我而言,我们希望 DATE 列默认为 NULL,并在某些情况下更新/重新设置 NULL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多