日期时间是否等效于java.sql?(有java.sql.datetime吗?)


74

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

我想使用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/...
Barak1731475

Answers:


125

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

您想要最后一个: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); 

2
谢谢,这就是我想要的。您如何发现这些类型与某些SQL类型匹配?我有点麻烦,因为我的查询可以使用NOW()正常工作,但不能在Java中使用日期为“ now”的日期实例并将其用作时间戳?
Stefan Hendriks

我发现我在查询中犯了一个错误。我错过了明显的事情。您的答案就是解决方案,非常感谢!:)
Stefan Hendriks

你提到java.sql.Date - A date only (no time)那怎么date.getTime()回时间?
Java Spring Coder

2
@FunsukWangadu因为java.sql.Datejava.util.Date(按原样java.sql.Time)的子类,所以即使它不是“时间紧迫的时刻”,它也会像继承它一样继承所有方法。这是Java API中的设计缺陷。
波希米亚

加一,特别是为了回答我关于设置预准备语句的后续问题!
jumps4fun 2014年

6

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


谢谢。我虽然正在使用MYSQL,所以已经更新了问题。
Stefan Hendriks,

更新答案以包括MySQL。
奥拉夫

1

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

我这样解决了

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

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

其中start是Date对象。


1

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

在SQL中,通常具有日期(仅日期),时间(仅时间)和日期时间/时间戳(日期和时间)。

在Java程序中,通常总是有java.util.Date,因此每次在PreparedStatements中设置Dates / Times / DateTimes时,总是要根据数据库准确选择所需的日期。


如何在UTC中(而不是在服务器的时区中)检索DateTime对象?
ARK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.