MyBatis向Oracle数据库插入NULL数据报错

当使用MyBatis在Oracle数据库尝试插入NULL值时,遇到UncategorizedSQLException,提示无法处理JdbcType OTHER。Oracle不支持处理这种类型,而MySQL则可以。解决方法包括在XML映射文件中为每个null值指定jdbcType,或者全局配置mybatis-config.xml,通过settings指定null的jdbcType。

原文链接

https://blog.wanvale.com/archives/86/

摘要

报错内容如下:

org.springframework.jdbc.UncategorizedSQLException:Error setting null for parameter #6 with JdbcType OTHER . Try setting adifferent JdbcType for this parameter or a different jdbcTypeForNullconfiguration property.

问题分析

有兴趣的同学可以去读一下MyBatis的源码,在JdbcType.class里面定义了原生Jdbc的数据类型,里面定义了一个OTHER(Types.OTHER)。
所以MyBatis对所有null值的映射都为Jdbc OTHER
而对于Oracle数据库来说,是没办法处理OTHER类型的(MySQL中是可以正常插入的,因为MySQL比较遵循规范)

解决方法

方法1

一种解决方法是对数据变量设置jdbcType
TestMapper.xml

<insert id="..." parameterType="...">
INSERT INTO mybatis_test_01(id,name,remarks) VALUES(SEQ_TEST.nextval, #{name,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR)
</insert>

当然,这种方法的弊端是要增加大量代码,提高了后期维护的难度。

方法2

这种方法很简单,修改mybatis-config.xml,添加一行setting就可以了

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

把上面的一行添加到mybatis配置文件的标签内就可以为null指定jdbc类型了。

文档的描述如下:

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。

至此,问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值