在Java中对mysql数据库插入datetime类型数据

时间:2021-04-04 00:40:22

最近在做一个简单的考勤系统的时候碰到了一个弄了我好久的问题,在我往数据库中更新一条签到时间的记录的时候,我获取的时间是没有错的,但是Hibernate往数据库里面插入的时候数据的时候,控制台报了一大堆错误,而数据库里面也是没有任何数据被更新的。。这就引发了异常Debug~~
我数据库里面定义的字段是这样的:
字段名 :punch_time 字段类型:datetime
然后我往数据库插入的数据是这样的

Date date=new Date();     //获取一个Date对象
DateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //创建一个格式化日期对象
String punchTime = simpleDateFormat.format(date); //格式化后的时间

这个时间得到的时间对象确实是 “yyyy-MM-dd HH:mm:ss“,也就是我们常见的例如”2016-12-20 15:00:00“样的日期对象,然后我觉得程序运行下去没有事,然后控制台就开始报错了,因为在实体类中设置字段punch_time是使用的java.util.Date类型,然后我传过去自然就是错误的。然后我决定不用格式化后的时间去,我直接传一个new Date()对象进去,结果是肯定的,直接抛异常。

在Mysql数据库中日期跟时间的我知道有两种,一种是date类型,还有一种是datetime类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期,另外一种dateitme自然就是又可以储存日期同时也可以储存时间,不过是连在一起的,也就是我需要的目标类型。查询Mysql手册中连接 datetime可以保存1000-01-019999-12-31的日期,

这个时候我又想起以前在写JDBC代码的时候好像也碰过这个问题,也是在定义实体类对象的时候也是被 java.util.Date对象跟 java.sql.Date对象搞混了,无奈只好去谷歌上搜索下怎么样处理比较好,但是搜出来的都是比较的中国化结果,大部分都是你抄我的我抄你的,往下翻,在CSDN上博主名为dongdong9223有一篇博客是介绍关于Java中对数据库插入datetime类型的数据,阅读后可以提取出两行核心代码,就是使用Timestamp对象,代码如下:

  java.util.Date date = new java.util.Date();          // 获取一个Date对象
Timestamp timeStamp = new Timestamp(date.getTime()); // 讲日期时间转换为数据库中的timestamp类型

使用这两行代码转换时间后,我们就可以往数据库插入”yyyy-MM-dd HH:mm:ss“类型,通过Intellij IDEA查看继承关系,我们可以发现Timestamp对象也是继承了Date
在Java中对mysql数据库插入datetime类型数据