簡體   English   中英

插入DATETIME時出現java.sql.Timestamp錯誤

[英]java.sql.Timestamp error when inserting into DATETIME

當我嘗試使用java.sql.Timestamp值插入MySQL 5.6中的DATETIME列時,總是出現此錯誤:

com.mysql.jdbc.MysqlDataTruncation:數據截斷:錯誤的日期時間值:第1行的'invoice_date'列

該項目的原始開發人員具有定制的JAR,這些JAR創建了Prepared語句,因此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版本的所有內容?

如果問題是毫秒,則顯式日期格式為您的時間戳。 如果用例在MySQL 5.0上成功,並且您在5.0和5.6上部署了不同的jdbc驅動程序,則值得在MySQL 5.6上測試該驅動程序。 最后,您沒有在設置器中傳遞索引,並且錯誤的datetime值是空字符串。 您是否已在調試器/日志中驗證您沒有嘗試插入空字符串?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM