2012-10-16 41 views
2

dateTime mysql列上的那個java.sql.PreparedStatement#setDate怎麼總是導致日期格式如2012-10-16 00:00:00沒有時間信息?我在這樣的循環存儲日期:PreparedStatement將沒有Time信息的java.util.Date和java.sql.Date設置爲Mysql dateTime列

protected Date getIncrementedDateTime() { 
    additionalTime += 1000; 
    return new Date(System.currentTimeMillis() + additionalTime); 
} 


preparedStatement.setDate(j, new java.sql.Date(getIncrementedDateTime().getTime()); 

我調試的值,但MySQL數據庫總是有2012-10-16 00:00:00值。

回答

3

作爲每文檔java.sql.Date

薄包裝紙圍繞一毫秒值,它允許JDBC識別爲SQL DATE值。 [...]

要符合SQL DATE的定義,由java.sql.Date實例包裝的毫秒值必須通過將小時,分鐘,秒和毫秒設置爲零來「歸一化」與實例關聯的特定時區。

基本上,對於日期時間列,您應該使用不同的類型,例如, Timestamp。 (這在其他方面並不理想,但它可能更適合...)

+0

時間戳不會與'dateTime'列類型對嗎?不正確的日期時間值:'16:16:51'列...所以我需要使用'timeStamp'列類型和時間戳數據類型? – lisak

+0

@Sloin:我懷疑* Timestamp實際上可以很好地處理日期時間列。這裏基本上是JDBC中的一個省略,但是'Timestamp'可能儘可能地靠近你。 –

+0

你說得對,java.sql.Timestamp和ps.setTimestamp(j,(Timestamp)value); 'dateTime'列類型可以正常工作 – lisak

0

java.sql.Date只是一個日期 - 沒有時間。不要將它與包含時間信息的java.util.Date混淆。你可能想看看java.sql.Timestamp。

0

它基於表格列的數據類型。根據數據庫服務器嘗試使用TimeStampTime

相關問題