用Java操作MySQL数据中的日期类型的数据存取问题分析及其解决办法

发布于:2024-06-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

在Java中向MySQL数据库存取日期类型的数据时,可能会遇到一些常见问题,以下是一些关键点和解决办法:

一、问题说明

  • MySQL支持多种日期时间类型,如DATETIMEDATETIMETIMESTAMPYEAR
  • Java中处理日期时间主要使用java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, 以及Java 8引入的java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime等。
  • MySQL中我们常用的类型为DATETIME类型,而Java中我们常用的类型为java.util.Date,这就遇到了转换问题,下面进行问题分析

二、问题分析

  • mysql中的日期类DATETIMEDATETIMETIMESTAMP分别对应的是Java中sql包下的DateTimeTimestamp,那么就问题就变成util包下与sql包下之间的类型转换问题了,这就变得简单了。

三、解决办法

1.Java日期向数据存

方法一:
insert into borrowing_tb (userid,bookid,brwtime) 
values (2,8,"2024-06-29 19:49:00")

在这里插入图片描述

  • 通过上面发现我们可以通过字符串日期向数据库插入日期,那么我们就可以通过SimpleDateFormat类中的format方法先将util.Date类型转为字符串类型,再存入数据库,如果对SimpleDateFormat不太了解的同学可以点下面链接看我的之前发的博客哦
  • Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍 在这里插入图片描述
方法二:

在这里插入图片描述

  • 通过API我们发现sql包下的日期类的构造方法的参数都是long类型的,而util包下包下的日期类都有一个获得long类型的方法

在这里插入图片描述

  • 那么我们就可以使用getTime()方法将util包下的日期作为sql包下构造方法的参数,这样我们就实现了util和sql日期的转换问题了,这样才创建的日期是一模一样的。
  1. 再使用PreparedStatement将sql类型日期存入数据库
    • 使用PreparedStatement来防止SQL注入,并正确绑定日期时间值。例如,对于DATETIMETIMESTAMP类型,可以直接使用setTimestamp方法。
    • 方法与对应的类型不匹配,可能会造成下面图片中的情况

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.从数据库中取日期


在这里插入图片描述

我们发现sql包下的都是util.Date的子类,那么我们就只需向上转型就可以了,不用强转,直接向util.Datel类型的对象赋值即可,取值非常方便,只需要注意方法要用用好

  1. 结果集读取

    • 查询时,从ResultSet中读取日期时间值,使用相应的getDate, getTime, 或getTimestamp方法。
    • 如果使用Java 8日期时间API,可能需要手动转换ResultSet中的java.sql.*类型到新的API类型。
  2. 时间精度丢失

    • 确保MySQL表的日期时间字段精度与Java对象匹配。例如,如果MySQL的DATETIME字段精度设为6(微秒),Java端也应处理到微秒级别。

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述