背景:MySQL 8.0数据库;
最近在做一个小框架,因为本身比较精简,就没有引入太多依赖,直接用了JDBC来操作数据库,因为我的表中有一个 datetime
类型的字段,对应的Java代码中使用的是 java.time.LocalDateTime
,在处理这个日期字段的时候,就遇到了一个有趣的问题;
在我的数据库表建好后,在Java中使用JDBC原生API实现了一个repository,包含一些数据库的操作,因为代码中有 java.time.LocalDateTime
字段,在使用 java.sql.PreparedStatement
的时候不确认 java.sql.PreparedStatement.setObject(int, java.lang.Object)
方法接收 java.time.LocalDateTime
类型的入参后是否可以正确处理,就写了一小段测试用例来测试,核心代码如下:
preparedStatement.setObject(1, LocalDateTime.now());
一行简单的JDBC调用设置参数,参数类型是LocalDateTime,最终发现没有报错,如果一切OK,那么事情到这里就结束了,但是…….
当我到数据库查看数据的时候,发现日期竟然不对,日期存到数据库后竟然少了14个小时,整整14个小时&