MySQL驱动中关于时间的坑
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!
所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取
背景: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
类型的入参后是否可以正确处理,就写了一小段测试用例来测试,核心代码如下:
1 |
preparedStatement.setObject(1, LocalDateTime.now()); |
一行简单的JDBC调用设置参数,参数类型是LocalDateTime,最终发现没有报错,如果一切OK,那么事情到这里就结束了,但是…….
当我到数据库查看数据的时候,发现日期竟然不对,日期存到数据库后竟然少了14个小时,整整14个小时,当时的我真的是….