1

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

com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期时间值:第 1 行的列 'invoice_date' 的''

该项目的原始开发人员拥有创建 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 的服务器上,这可以正常工作。我假设时间戳中的毫秒值导致转换为 DATETIME 的问题?由于原始作品在旧版本中。有没有办法解决这个问题而不必重新安装 5.0 的所有内容?

4

1 回答 1

1

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

于 2013-06-27T04:38:10.610 回答