日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)

發布時間:2023/12/20 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據庫mybatis 插入空值時報錯(with JdbcType OTHER)的兩種解決方案

在使用Mybatis 3?時,發現了這個問題,當插入數據時,如果有一個字段為空值時,系統會報異常,導致插入數據失敗。

異常信息類似:

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.?

經過查閱各種資料,終于找到了兩種解決方案,分別如下,其中第二種方案個人比較喜歡。

第一種方式,如出錯信息中提到的,需要在每個數據變量那里設置相應的jdbcType,示例如下(加粗加下劃線部分的內容):

1.?????<insert?id=”insertCustomerLog1″?parameterType=”com.diyicai.customer.domain.CustomerLog”>

2.?????????????insert?into?customer_log

3.????????????????????(

4.????????????????????ID,

5.????????????????????CUSTOMER_SERVICE_USER_NAME,

6.????????????????????user_name?,

7.????????????????????CONTENT,

8.????????????????????LOG_FIRST_TYPE,

9.????????????????????STATUS,

10.?????????????????LINKED_ID,

11.?????????????????FEE,

12.?????????????????ACCOUNT_FIRST_TYPE,

13.?????????????????ACCOUNT_SECOND_TYPE,

14.?????????????????ACCOUNT_THIRD_TYPE,

15.?????????????????LOG_SECOND_TYPE,

16.?????????????????LOG_IP,

17.?????????????????MEMO

18.?????????????????)

19.?????????????????values

20.?????????????????(

21.?????????????????seq_customer_log.nextval?,

22.?????????????????#{customerServiceUserName,jdbcType=VARCHAR}?,

23.?????????????????#{username,jdbcType=VARCHAR},

24.?????????????????#{content,jdbcType=VARCHAR},

25.?????????????????#{logFirstType,jdbcType=NUMERIC},

26.?????????????????#{status,jdbcType=NUMERIC},

27.?????????????????#{linkedId,jdbcType=VARCHAR},

28.?????????????????#{fee,jdbcType=NUMERIC},

29.?????????????????#{accountFirstType,jdbcType=NUMERIC},

30.?????????????????#{accountSecondType,jdbcType=NUMERIC},

31.?????????????????#{accountThirdType,jdbcType=NUMERIC},

32.?????????????????#{logSecondType,jdbcType=NUMERIC},

33.?????????????????#{logIp,jdbcType=VARCHAR},

34.?????????????????#{memo,jdbcType=VARCHAR}

35.?????????????????)

36.??????</insert>

這種方案在網上有很多介紹,但是我不滿意,因為太麻煩了,要增加很多代碼,導致后期的維護困難增加。后來找到以下第二種方案,很不錯,推薦一下。

第二種方案:MyBatis-config.xml?中設置當JDBC類型為空值時,要指定的值得,默認為OTHER,我們指定為NULL就好了(注意是大寫的NULL)。?

順便補習一下MyBatis-config.xml配置說明,趕緊收藏吧。

1.???????<!–?配置設置?–>??

2.???????????<settings>??

3.???????????????<!–?配置全局性?cache?的?(?開?/?關)?default:true?–>??

4.???????????????<setting?name=“cacheEnabled”?value=“true”/>??

5.?????????????????

6.???????????????<!–?是否使用?懶加載?關聯對象??同?hibernate中的延遲加載?一樣??default:true?–>??

7.???????????????<setting?name=“lazyLoadingEnabled”?value=“true”/>??

8.?????????????????

9.???????????????<!–?[當對象使用延遲加載時?屬性的加載取決于能被引用到的那些延遲屬性,否則,按需加載(需要的是時候才去加載)]?–>??

10.?????????????<setting?name=“aggressiveLazyLoading”?value=“true”/>??

11.???????????????

12.?????????????<!–?是否允許單條sql?返回多個數據集??(取決于驅動的兼容性)?default:true?–>??

13.?????????????<setting?name=“multipleResultSetsEnabled”?value=“true”/>??

14.???????????????

15.?????????????<!–?是否可以使用列的別名?(取決于驅動的兼容性)?default:true–>??

16.?????????????<setting?name=“useColumnLabel”?value=“true”/>??

17.???????????????

18.?????????????<!–允許JDBC?生成主鍵。需要驅動器支持。如果設為了true,這個設置將強制使用被生成的主鍵,有一些驅動器不兼容不過仍然可以執行。??default:false–>??

19.?????????????<setting?name=“useGeneratedKeys”?value=“false”/>??

20.???????????????

21.?????????????<!–指定?MyBatis?如何自動映射?數據基表的列?NONE:不隱射 PARTIAL:部分??FULL:全部–>??

22.?????????????<setting?name=“autoMappingBehavior”?value=“PARTIAL”/>??

23.???????????????

24.?????????????<!–?這是默認的執行類型???

25.?????????????????SIMPLE?:簡單????

26.?????????????????REUSE:執行器可能重復使用prepared?statements?語句???

27.?????????????????BATCH:執行器可以重復執行語句和批量更新??

28.?????????????–>??

29.?????????????<setting?name=“defaultExecutorType”?value=“SIMPLE”/>??

30.???????????????

31.?????????????<!–?設置驅動等待數據響應的超時數??默認沒有設置–>??

32.?????????????<setting?name=“defaultStatementTimeout”?value=“25000″/>??

33.???????????????

34.?????????????<!–?[是否啟用?行內嵌套語句??defaut:false]?–>??

35.?????????????<setting?name=“safeRowBoundsEnabled”?value=“false”/>??

36.???????????????

37.?????????????<!–?[是否?啟用??數據中?A_column?自動映射?到?java類中駝峰命名的屬性?default:fasle]?–>??

38.?????????????<setting?name=“mapUnderscoreToCamelCase”?value=“false”/>??

39.???????????????

40.?????????????<!–?設置本地緩存范圍?session:就會有數據的共享??statement:語句范圍?(這樣就不會有數據的共享?)?defalut:session?–>??

41.?????????????<setting?name=“localCacheScope”?value=“SESSION”/>??

42.???????????????

43.?????????????<!–?設置但JDBC類型為空時,某些驅動程序?要指定值,default:OTHER?–>??

44.?????????????<setting?name=“jdbcTypeForNull”?value=“DEFAULT”/>??

45.???????????????

46.?????????????<!–?設置觸發延遲加載的方法??–>??

47.?????????????<setting?name=“lazyLoadTriggerMethods”?value=“equals,clone,hashCode,toString”/>??

48.???????????????

49.?????????</settings>?

本文參考資料:?http://takeme.iteye.com/blog/1732801???http://makemyownlife.iteye.com/blog/1610021

?

另外,再補充一點資料,可能更能讓我們了解問題的真相:

適配oracle數據庫的時候,mybatis報了Error setting null parameter,bug發現是參數出現了null值,對于Mybatis,如果進行操作的時候,沒有指定jdbcType類型的參數,就可能導致問題。

postgreSQL,MySQL,SQLSERVER都支持JdbcType.NULL類型,Oracle是不支持,適配的時候也因為這個問題導致mybatis報錯。

比如,之前配置#{submitDate},它會在oracle中報錯:Error settingnull parameter

更改成#{submitDate,jdbcType=DATE},注意jdbcType是區分大小寫的。

轉載于:https://www.cnblogs.com/itrena/p/9018685.html

總結

以上是生活随笔為你收集整理的Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。