Oracle数据库mybatis 插入空值时报错问题

更新时间:2023-05-16 04:33:59 阅读: 评论:0

Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
在使用Mybatis 3 时,发现了这个问题,当插入数据时,如果有一个字段为空值时,系统会报异常,导致插入数据失败。
异常信息类似:
org.springframework.jdbc.UncategorizedSQLException: Error tting null for parameter #6 with JdbcTypeOTHER . Try tting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. 
经过查阅各种资料,终于找到了两种解决方案,分别如下,其中第二种方案个人比较喜欢。
第一种方式,如出错信息中提到的,需要在每个数据变量那里设置相应的jdbcType,示例如下(加粗加下划线部分的内容):
1. <inrt id=”inrtCustomerLog1″ parameterType=”com.diyicai.customer.domain.CustomerLog”>
2.         inrt into customer_log
3.                (
4.                ID,
5.                CUSTOMER_SERVICE_USER_NAME,
6.                ur_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.                q_val ,
22.                #{customerServiceUrName,jdbcType=VARCHAR} ,
23.                #{urname,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.     </inrt>
这种方案在网上有很多介绍,但是我不满意,因为太麻烦了,要增加很多代码,导致后期的维护困难增加。后来找到以下第二种方案,很不错,推荐一下。
第二种方案:l 中设置当JDBC类型为空值时,要指定的值得,默认为OTHER,我们指定为NULL就好了(注意是大写的NULL)。 
顺便补习一下l配置说明,赶紧收藏吧。
1. <!– 配置设置 –> 
2.     <ttings> 
国庆节手抄报图片
3.         <!– 配置全局性 cache 的 ( 开 / 关) default:true –> 
4.         <tting name=“cacheEnabled” value=“true”/> 
5.          
6.         <!– 是否使用 懒加载 关联对象  同 hibernate中的延迟加载 一样  default:true –> 
7.         <tting name=“lazyLoadingEnabled” value=“true”永久激活win10专业版/> 
8.          
9.         <!– [当对象使用延迟加载时 属性的加载取决于能被引用到的那些延迟属性,否则,按需加载(需要的是时候才去加载)] –> 
10.         <tting name=“aggressiveLazyLoading” value=“true”/> 
11.           风餐露宿是什么意思
12.         <!– 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true –> 
13.         <tting name=“multipleResultSetsEnabled” value=“true”/> 
14.          
15.         <!– 是否可以使用列的别名 (取决于驱动的兼容性) default:true–> 
16.         <tting name=“uColumnLabel” value=“true”/> 
17.          
18.         <!–允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:fal–> 
19.         <tting name=“uGeneratedKeys” value=“fal”/> 
20.          
21.         <!–指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部–> 
22.         <tting name=“autoMappingBehavior” value=“PARTIAL”/> 
23.          
24.         <!– 这是默认的执行类型   
25.             SIMPLE :简单   
26.             REUSE:执行器可能重复使用prepared statements 语句   
27.             BATCH:执行器可以重复执行语句和批量更新 
28.         –> 
29.         <tting name=“defaultExecutorType”设备搬迁方案 value=“SIMPLE”/> 
30.          
31.         <!– 设置驱动等待数据响应的超时数  默认没有设置–> 
32.         <tting name=“defaultStatementTimeout” value=“25000″/> 
33.          
34.         <!– [是否启用 行内嵌套语句  defaut:fal] –> 
35.         <tting name=“safeRowBoundsEnabled” 耕耘value=“fal”/> 
36.          
37.         <!– [是否 启用  数据中 A_column 自动映射 到 java类中驼峰命名的属性 default:fasle] –> 
38.         <tting name=“mapUnderscoreToCamelCa” value=“fal”/> 
39.          
40.         <!– 设置本地缓存范围 ssion:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:ssion –> 
41.         <tting name=“localCacheScope” value=“SESSION”/> 
42.          
43.         <!– 设置但JDBC类型为空时,某些驱动程序 要指定值,default: OTHER –> 
44.         <tting name=“jdbcTypeForNull” value=“DEFAULT”/> 
45.          
46.         <!– 设置触发延迟加载的方法  –> 
47.         <tting name=“lazyLoadTriggerMethods” value=“equals,clone,hashCode,toString”/> 
48.          
49.     </ttings> 
本文参考资料: /blog/1732801   /blog/1610021
 
另外,再补充一点资料,可能更能让我们了解问题的真相:
适配oracle数据库的时候,mybatis报了Error tting null parameter,bug发现是参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,就可能导致问题。

本文发布于:2023-05-16 04:33:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/902222.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   设置   加载   导致   延迟   需要   方案   空值
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图