网上有很多帖子说明了这种情况多数是由于表中日期类型字段insert时传入的参数不匹配导致!!!
没错根本原因就是如此,下面记录一个奇怪的现象:
有下面一张表,注意uptime字段date类型不能为空但是有个默认值‘2018-11-02’

执行 插入语句成功
insert into CRMTESTINSERT(code, name) values(123, '123')
现象一:
在java 代码中通过 mybatis 插入会报下面的错误:

现象二:
或许你操作的表没有这样的日期字段,如果此表有触发器并且在触发器中插入了其它表B,表B有这中默认字符串格式的日期字段,也会出现ORA-01861的报错。
一种解决方法:
不使用数据库的默认字符串赋值,通过给对象uptime字段赋一个date类型的值。
或者参考网上关于oracle 日期类型字段insert插入不匹配的其它解决方法。
上面的工程使用的oracle驱动依赖如下:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
猜测此错误可能和驱动有关,如果有大神了解还请不吝赐教!!

本文详细解析了在MyBatis框架下,通过Java代码向Oracle数据库插入数据时遇到的ORA-01861错误。该错误通常由日期类型字段插入参数不匹配引起,特别是在表中有默认日期值或触发器涉及其他表的日期字段时更为常见。文章提供了一种解决方案,即直接给对象的日期字段赋值为Date类型,而非依赖数据库默认值。

被折叠的 条评论
为什么被折叠?



