java.sql 中的日期时间等价物? (有 java.sql.datetime 吗?)

Posted

技术标签:

【中文标题】java.sql 中的日期时间等价物? (有 java.sql.datetime 吗?)【英文标题】:A datetime equivalent in java.sql ? (is there a java.sql.datetime ?) 【发布时间】:2011-10-10 07:20:39 【问题描述】:

到目前为止,我还没有找到明确的答案。

我想知道使用 PreparedStatement 的 SQL 类型 DATETIME 和 java 类型的等价物是什么。

我找到了:http://www.java2s.com/Code/Java/Database-SQL-JDBC/StandardSQLDataTypeswithTheirJavaEquivalents.htm

但它指出 SQL 类型“DATETIME”与 sql.date 相同,但在查看 SQL 日期文档 (http://download.oracle.com/javase/7/docs/api/java/sql/Date.html) 时,它说时间被截断(全为零)。

我想要的是能够指定preparedStatement.setDateTime() 或某种类型。

我看到的唯一其他方法是使用时间戳,但这需要我更改列类型,而我无法想象其他人以前从未遇到过这个问题?

有什么提示吗?

编辑:我正在使用 mysql

【问题讨论】:

mysql文档官方映射:dev.mysql.com/doc/refman/5.1/en/… 【参考方案1】:

java.sql 包具有三种日期/时间类型:

java.sql.Date - 仅日期(无时间部分) java.sql.Time - 仅限时间(无日期部分) java.sql.Timestamp - 日期和时间

你想要最后一个:java.sql.Timestamp

如果您使用这些类型,则无需调用特定的 setter;只需使用:

java.util.Date date = new Date();
Object param = new java.sql.Timestamp(date.getTime());
// The JDBC driver knows what to do with a java.sql type:
preparedStatement.setObject(param); 

【讨论】:

谢谢,这就是我要找的。您是如何发现这些类型与某些 SQL 类型匹配的?我有点麻烦,因为我的查询可以正常使用 NOW(),但不能在 java 中使用“now”的日期实例并将其用作时间戳? 我发现我在查询中犯了错误。我错过了一些明显的东西。您的答案就是解决方案,非常感谢! :) 你提到了java.sql.Date - A date only (no time),那么date.getTime()怎么会返回时间呢? @FunsukWangadu 因为java.sql.Datejava.util.Date 的子类(java.sql.Time 也是),所以即使它不是“及时”,它也继承了所有方法,就好像它是。这是 java API 的设计缺陷。 加一,特别是为了回答我关于设置preparedstatement的后续问题!【参考方案2】:

在 Java 中,我们有 java.util.Date 来处理日期和时间值。

在 SQL 中,通常有 Dates(仅日期)、Time(仅时间)和 DateTime/Timestamp(日期和时间)。

在您的 Java 程序中,通常您将始终拥有 java.util.Date,因此每次在 PreparedStatements 中设置 Dates/Times/DateTimes 时,请始终根据数据库准确选择您需要的那个。

【讨论】:

如何在 UTC(不是服务器的时区)中检索 DateTime 对象?【参考方案3】:

我的 Mysql 有一个类似的问题,有 SQL 日期,而在我的应用程序本地我只有日期

我是这样解决的

java.sql.Date dataStartSql = new java.sql.Date(start.getTime());  

之后正常使用 setDate,然后我使用 getTimestamp 检索第一个值。

其中 start 是一个 Date 对象。

【讨论】:

【参考方案4】:

MS SQL Server 或 MySQL DATETIME 数据类型或 Oracle DATE 数据类型的等价物是 java.sql.Timestamp。

【讨论】:

谢谢。不过我使用的是 MYSQL,所以我更新了问题。 更新答案以包含 MySQL。

以上是关于java.sql 中的日期时间等价物? (有 java.sql.datetime 吗?)的主要内容,如果未能解决你的问题,请参考以下文章

java时间和日期类型

1 Java中的时间类型

spring JPA java.sql.Date 接受无效日期

Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用

将 Joda 时间映射到 Cassandra 的日期类型

在 PostgreSQL 上设置默认日期格式