如题,用到是 Oracle 数据库。 更新数据的是或发现 SQL 执行失败了,排查了一下发现问题是出现在 Date 上。
class Dto{
private Date updated;
}
mybatis 的 xml 是下面这样的,param 是一个 dto 对象
update xx set xx.updated = {#param.updated} where ....
发现真实执行的 SQL 如下
update xx set xx.updated = '2018-08-30 00:00:00.0' where ....
oracle 报错:ORA-01861,文字与格式字符串不匹配。 我打算是想用 to_date 方法,格式化一下,不过为什么{#param.updated}这个解析以后,会多一个毫秒呢? 请问一下在线的老哥,谢谢!!
1
w292614191 2020-06-15 17:34:01 +08:00
jdbcType=TIMESTAMP
|
2
miv OP @w292614191 好的,感谢,我试试。Oracle 里面 xx 的字段 updated 是 Date 类型,不知道是否可以
|
3
miv OP @w292614191 好像不行,不知道哪里的问题
|
4
miv OP select cast(to_timestamp('2019-04-03 10:10:10.10', 'syyyy-mm-dd hh24:mi:ss.ff') as date) timestamp_to_date from dual;
找到一个方法,用上面的方法转成 SQL 的 Date,不过改动起来麻烦,求更好、方便的方法。 |
5
aragakiyuii 2020-06-15 18:00:55 +08:00 via iPhone
井号放里面是什么意思?
#{param.updated, jdbcType=TIMESTAMP} |
6
w292614191 2020-06-16 08:47:15 +08:00
|
7
w292614191 2020-06-16 08:47:44 +08:00
还有,你是传入的 java.util.date 吧?
|
8
miv OP @w292614191 那奇怪了,我传入的是 java.util.data,加#{param.updated, jdbcType=TIMESTAMP},后还是会出现有毫秒的情况。
后面我直接修改成 Map 对象,传递格式化好的 date 字符串进去了。 |
9
miv OP @w292614191 这个问题我也问了下同事,他之前遇到过,用老哥提供的方法解决,不过用 sql 打印插件打出来的 sql 也是带毫秒的,实际执行没有问题。
|
10
dtgxx 2020-06-16 13:52:24 +08:00
自定义一个 Config 类 实现 WebMvcConfigurer
然后在里面声明一个 Bean /** * 时间格式转换器,将 Date 类型统一转换为 yyyy-MM-dd HH:mm:ss 格式的字符串 */ @Bean public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); //日期格式转换 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); converter.setObjectMapper(mapper); return converter; } |