本文将优雅地解决如何在 Java 和 MySQL 中存储不包含时间信息的日期的问题。
java.time 提供了多种日期时间类型,其中 LocalDate 代表不包含时间或时区信息的日期。在 java.time 中,日期使用 ISO 8601 标准表示,确保日期部分在所有时区中保持一致。
在 MySQL 中存储 LocalDate 值时,应使用 DATE 数据类型。下表显示了 ANSI SQL 数据类型和 Java 8 日期时间类型之间的映射:
ANSI SQL 数据类型 | Java 8 日期时间类型 |
---|---|
DATE | 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中文网其他相关文章!