oracle可以插入空值么,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.

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.

这种方案在网上有很多介绍,但是我不满意,因为太麻烦了,要增加很多代码,导致后期的维护困难增加。后来找到以下第二种方案,很不错,推荐一下。

第二种方案:MyBatis-config.xml中设置当JDBC类型为空值时,要指定的值得,默认为OTHER,我们指定为NULL就好了(注意是大写的NULL)。

顺便补习一下MyBatis-config.xml配置说明,赶紧收藏吧。

1.

2.    

3.        

4.        

5.

6.        

7.        

8.

9.        

10.        

11.

12.        

13.        

14.

15.        

16.        

17.

18.        

19.        

20.

21.        

22.        

23.

24.        

25.            SIMPLE :简单

26.            REUSE:执行器可能重复使用prepared statements 语句

27.            BATCH:执行器可以重复执行语句和批量更新

28.        –>

29.        

30.

31.        

32.        

33.

34.        

35.        

36.

37.        

38.        

39.

40.        

41.        

42.

43.        

44.        

45.

46.        

47.        

48.

49.    

另外,再补充一点资料,可能更能让我们了解问题的真相:

适配数据库的时候,mybatis报了Error setting null parameter,bug发现是参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,就可能导致问题。

postgreSQL,,SQLSERVER都支持JdbcType.NULL类型,是不支持,适配的时候也因为这个问题导致mybatis报错。

比如,之前配置#{submitDate},它会在oracle中报错:Error settingnull parameter

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值