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.Date
是java.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 吗?)的主要内容,如果未能解决你的问题,请参考以下文章
spring JPA java.sql.Date 接受无效日期