2013-06-27 86 views
1

當我嘗試使用java.sql.Timestamp值插入到在MySQL 5.6 DATETIME列時,我總是得到這樣的錯誤:java.sql.Timestamp中的錯誤插入DATETIME

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'invoice_date' at row 1

原此項目的開發人員具有創建Prepared語句的自定義JAR,以便將java.util.Date轉換爲Timestamp以插入到DATETIME中,反之亦然,以及處理的數據庫連接。請注意,這是我的假設,因爲沒有關於它的文檔。嘗試使用時間戳通過的PreparedStatement插入到DATETIME我有同樣的結果,使用類似:

ps.setTimestamp(3, new Timestamp(date.getTime()));

我要創建我自己的連接,這樣我可以使用java.sql.Date來解決這個問題。但是,它會將結果的時間值歸零。我用

ps.setDate(3, new java.sql.Date(date.getTime()));

我也得到類似

2013-06-27 00:00:00

在表中,因爲我們知道java.sql.Date不存儲的時間。

令人驚訝的是,在使用MySQL 5.0的服務器上,此功能正常工作。我假設Timestamp中的毫秒值導致問題轉換爲DATETIME?由於原作品在舊版本中。有沒有什麼辦法可以解決這個問題,而無需重新安裝5.0的所有內容?

+0

使用Java.util.Date –

+0

我無法在PreparedStatement中使用java.util.Date。它必須首先變成java.sql.Date。 –

回答

1

如果問題是毫秒,那麼顯式日期格式化您的時間戳。如果用例在MySQL 5.0上成功,並且在5.0和5.6上部署了不同的jdbc驅動程序,則值得在MySQL 5.6上測試該驅動程序。最後,您沒有在您的設置器中傳遞索引,並且不正確的日期時間值是空字符串。您是否在調試器/日誌中驗證過您並未試圖插入空字符串?

+0

哦,對不起,在我輸入這些樣本行時忘記了包含索引。代碼本身有一個索引和日誌顯示它們有價值。 我實際上在5.0和5.6上使用相同的jdbc驅動程序。 DATETIME類型會帶一個String嗎?我認爲它必須是日期類型,如日期或時間戳。 –

+0

剛剛嘗試格式化時間戳,並使用該字符串代替,這在我的測試中工作。謝謝您的幫助!仍然有必要爲此創建自己的數據庫連接,但由於自定義JAR而無法提供幫助。我只是做我的修改,所以它可以在5.0和5.6上運行。 –