插入 DATETIME 时出现 java.sql.Timestamp 错误

标签 java mysql datetime timestamp

当我尝试使用 java.sql.Timestamp 值插入 MySQL 5.6 中的 DATETIME 列时,我总是会收到此错误:

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

该项目的原始开发人员拥有创建准备语句的自定义 JAR,例如将 java.util.Date 转换为要插入到 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 的服务器上,这可以正常工作。我假设时间戳中的毫秒值导致转换为 DATETIME 的问题?由于原始版本适用于旧版本。有什么方法可以解决这个问题而不必使用 5.0 重新安装所有内容吗?

最佳答案

如果问题是毫秒,请显式设置时间戳的日期格式。如果用例在 MySQL 5.0 上成功并且您在 5.0 和 5.6 上部署了不同的 jdbc 驱动程序,则值得在 MySQL 5.6 上测试该驱动程序。最后,您没有在 setter 中传递索引,并且不正确的日期时间值是空字符串。您是否在调试器/日志中验证过您没有尝试插入空字符串?

关于插入 DATETIME 时出现 java.sql.Timestamp 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333903/

相关文章:

Mysql 错误 #1452 - 无法添加或更新子行

python - 类型错误 : descriptor 'strftime' requires a 'datetime.date' object but received a 'Text'

java - 如何避免将 @RefreshScope 放在应用程序中的多个 bean 上

java - 哪个并发列表适合多个作者一个读者?

php - 计算无限项目的百分比

mysql - 理清子查询

python - 如果日期间隔大于 N 秒,则用最后一个值填充列表

c# - 在 C# 中测量执行时间

java - lucene返回的结果是否少于预期

java - 无法让 hibernate 通过级联删除已从一对多关系中删除的子实例