学习记录:关于java向mysql中存储datetime类型的数据时出现的问题总结

学习记录:关于java向mysql中存储datetime类型的数据时出现的问题总结

  • 1、程序运行后出现报错:

java.sql.SQLException: Data truncation: Incorrect datetime value…
原因是我在程序中是通过以下方式获得的时间

Timestamp timestamp = new Timestamp(System.currentTimeMillis());
order.setOrdertime(timestamp);

并将获得的时间写入到mysql数据库中,由于数据库中的相应的时间字段的属性是datetime类型,程序中获得的时间是2018-12-18 16:01:55.351,超出了字段的存储范围,所以出现”数据截断:日期时间值不正确“的错误。

  • 2、程序运行后可以存储时间,但是只有日期,时间丢失,数据库中的数据变成了:2018-12-18 00:00:00这种格式。
    以上现象的出现是因为我使用了以下语句造成的
 Date date = new Date();
     Timestamp timestamp = new Timestamp(date.getTime());
     order.setOrdertime(date);

精度丢失的原因暂时还没有查清楚

  • 3、解决方法
    对于刚出现这些问题时,经过在网上的查询原因,大多数答案都是互相抄袭,试过了所有的方法后发现还是无法解决问题。在经过了仔细的排查后发现,Java中的时间类型和数据库中的时间类型是不一样的,我的实体中定义的类型是Date,要是想和数据库中的时间类型保持一样,需要使用Timestamp(时间戳类型),通过转换成需要的格式后,再将转换的字符串数据转换成Timestamp类型存进数据库中。
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
order.setOrdertime(Timestamp.valueOf(dateFormat.format(timestamp)));
  • 4、关于String、Date和Timestamp的相互转换网上已经有很多文章了

你可能感兴趣的:(学习记录)