到目前为止,我还没有找到明确答案。
我想知道使用PreparedStatement对SQL类型DATETIME和java类型的等价物。
我找到了:http://www.java2s.com/Code/Java/Database-SQL-JDBC/StandardSQLDataTypeswithTheirJavaEquivalents.htm
但是它声明SQL类型“DATETIME”与sql.date相同,但是当查看SQL date docs(http://download.oracle.com/javase/7/docs/api/java/sql/Date.html)时,它表示时间被截断(全为零)。
我想要的是能够指定preparedStatement.setDateTime()
或某种类型。
我看到的唯一另一种方法是使用时间戳,但这需要我更改列类型,而我无法想象其他人之前从未遇到此问题?
任何提示?
编辑:我正在使用MYSQL。
答案 0 :(得分:95)
java.sql包有三种日期/时间类型:
java.sql.Date
- 仅限日期(无时间部分)java.sql.Time
- 仅限时间(无日期部分)java.sql.Timestamp
- 日期和时间你想要最后一个:java.sql.Timestamp
。
如果您使用这些类型,则无需致电特定的设定者;只需使用:
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);
答案 1 :(得分:4)
相当于MS SQL Server或MySQL DATETIME数据类型或Oracle DATE数据类型是java.sql.Timestamp。
答案 2 :(得分:1)
我有一个类似的问题,我的Mysql有SQL日期,在我的应用程序本地只有日期
我这样解决了
java.sql.Date dataStartSql = new java.sql.Date(start.getTime());
之后正常使用setDate,并使用getTimestamp来检索第一个值。
其中start是Date对象。
答案 3 :(得分:1)
在Java中,我们有java.util.Date来处理Date和Time值。
在SQL中,您通常有日期(仅限日期),时间(仅限时间)和日期时间/时间戳(日期和时间)。
在你的Java程序中,通常你总是有java.util.Date,所以每次你在PreparedStatements中设置Dates / Times / DateTimes时,总是根据数据库选择你需要的那个。