MyBatis向Oracle資料庫插入NULL資料報錯
阿新 • • 發佈:2021-01-08
原文連結
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)。
而對於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。
至此,問題解決