首页 >数据库 >mysql教程 >如何在Java和MySQL中高效存储没有时间或时区信息的日期?

如何在Java和MySQL中高效存储没有时间或时区信息的日期?

Barbara Streisand
Barbara Streisand原创
2025-01-22 05:51:121059浏览

How to Efficiently Store Dates Without Time or Time Zone Information in Java and MySQL?

Java 和 MySQL 中高效存储日期(无时间或时区信息)

本文将优雅地解决如何在 Java 和 MySQL 中存储不包含时间信息的日期的问题。

java.time: LocalDate

java.time 提供了多种日期时间类型,其中 LocalDate 代表不包含时间或时区信息的日期。在 java.time 中,日期使用 ISO 8601 标准表示,确保日期部分在所有时区中保持一致。

MySQL 数据类型映射

在 MySQL 中存储 LocalDate 值时,应使用 DATE 数据类型。下表显示了 ANSI SQL 数据类型和 Java 8 日期时间类型之间的映射:

ANSI SQL 数据类型 Java 8 日期时间类型
DATE LocalDate

在 MySQL 中存储 LocalDate

要将 LocalDate 值存储到 MySQL 中,可以使用以下 JDBC 语句:

<code class="language-java">PreparedStatement stmt = connection.prepareStatement("INSERT INTO birth_dates (birthdate) VALUES (?)");
stmt.setObject(1, localDate);</code>

从数据库中检索数据时,无论客户端或数据库服务器的时区如何,它都将始终解释为相同的日期。

示例

以下是如何使用 java.time 存储和检索不包含时间或时区信息的日期的示例:

<code class="language-java">// 创建 LocalDate 对象
LocalDate birthday = LocalDate.of(1990, 1, 1);

// 将其存储到数据库中
PreparedStatement stmt = connection.prepareStatement("INSERT INTO birth_dates (birthdate) VALUES (?)");
stmt.setObject(1, birthday);
stmt.executeUpdate();

// 从数据库中检索生日
ResultSet rs = connection.prepareStatement("SELECT birthdate FROM birth_dates WHERE id = 1").executeQuery();
if (rs.next()) {
    LocalDate retrievedBirthday = rs.getObject("birthdate", LocalDate.class);
    System.out.println(retrievedBirthday); // 输出:1990-01-01
}</code>

以上是如何在Java和MySQL中高效存储没有时间或时区信息的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn