1. 程式人生 > 其它 >MyBatis向Oracle資料庫插入NULL資料報錯

MyBatis向Oracle資料庫插入NULL資料報錯

技術標籤:java經驗分享javamybatis

原文連結

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。

至此,問題解決