Java 中 java.sql.Time、java.sql.Timestamp 和 java.sql.Date 的区别

2025年1月6日 | 3 分钟阅读

在 Java 中,准确地处理 **日期和时间** 信息对于许多应用程序至关重要,特别是那些涉及数据库交互的应用程序。java.sql 包提供了三个关键类:**java.sql.Date、java.sql.Time** 和 **java.sql.Timestamp**,用于将 SQL 标准的日期和时间类型映射到 Java 对象。

每个类都有其独特的用途和功能:java.sql.Date 处理仅日期值,java.sql.Time 处理仅时间值,而 java.sql.Timestamp 则处理日期和时间值,包括纳秒。理解这些类之间的区别对于开发人员确保正确的数据处理、精确的存储和从 SQL 数据库的检索至关重要。

java.sql.Date

  • 目的:表示不带时间成分的日期(年、月、日)。
  • 对应的 SQL 类型:DATE。
  • 精度:以天为单位存储日期信息。
  • 内部存储:内部将日期存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,但时间分量(小时、分钟、秒、毫秒)设置为零。
  • 示例输出 2024-07-08.

java.sql.Time

  • 目的:表示不带日期成分的时间(小时、分钟、秒)。
  • 对应的 SQL 类型:TIME。
  • 精度:以秒为单位存储时间信息。
  • 内部存储:内部将时间存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,并将日期分量(年、月、日)设置为纪元日期(1970-01-01)。
  • 示例输出 15:23:01.

java.sql.Timestamp

  • 目的:表示日期和时间,并带有可选的纳秒精度。
  • 对应的 SQL 类型:TIMESTAMP。
  • 精度:以纳秒为单位存储日期和时间信息。
  • 内部存储:内部将日期和时间存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,并额外包含一个用于纳秒的字段。
  • 示例输出 2024-07-08 15:23:01.123456789.
特性java.sql.Datejava.sql.Timejava.sql.Timestamp
目的表示不带时间的日期表示不带日期的时间表示日期和时间
对应的 SQL 类型DATETIMETIMESTAMP
精度纳秒
内部存储将日期存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数(时间分量设置为零)将时间存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数(日期分量设置为纪元日期 1970-01-01)将日期和时间存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数,并额外包含一个用于纳秒的字段
在 JDBC 中的用法用于与 SQL DATE 列进行交互用于与 SQL TIME 列进行交互用于与 SQL TIMESTAMP 列进行交互
构造函数参数long(毫秒)或 String(日期)long(毫秒)或 String(时间)long(毫秒)或 String(时间戳)
继承继承自 java.util.Date继承自 java.util.Date继承自 java.util.Date

示例

文件名:SqlDateExample.java

输出

 
SQL Date: 2024-07-16   

文件名:SqlTimeExample.java

输出

 
SQL Time: 16:35:32   

3. SqlTimestampExample.java

输出

 
SQL Timestamp: 2024-07-16 16:36:51.847   

在 JDBC 中的用法

在 Java 中与数据库交互时,**java.sql.Date、java.sql.Time** 和 **java.sql.Timestamp** 类用于高效地检索和设置日期和时间值。检索值时,通常使用 ResultSet 对象从数据库中获取数据。

ResultSet 类的 **getDate()、getTime() 和 getTimestamp()** 方法用于从结果集中提取分别为日期、时间和时间戳的值。这些方法返回 **java.sql.Date、java.sql.Time** 和 **java.sql.Timestamp** 的对象,这些对象随后可以在应用程序中用于进一步处理或显示。

设置值涉及准备 SQL 语句,通常使用 PreparedStatement 对象,并使用 setDate()、setTime() 和 setTimestamp() 方法指定日期、时间和时间戳参数的值。这些方法接受相应的 java.sql 类的参数,确保数据被正确格式化并存储在数据库中。正确使用这些方法可以确保日期和时间数据得到准确处理,保持数据库记录的完整性和一致性。这种方法实现了 Java 应用程序与 SQL 数据库之间的无缝集成,促进了有效的数据操作和检索操作。

结论

java.sql.Date、java.sql.Time 和 java.sql.Timestamp 的设计目的是处理与数据库交互的 Java 应用程序中的特定类型的日期和时间信息。java.sql.Date 用于仅日期值,java.sql.Time 用于仅时间值,而 java.sql.Timestamp 包含日期和时间以及高精度。了解它们的区别有助于为您的应用程序需求选择正确的类型。