Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入到DATETIME时发生java.sql.Timestamp错误_Java_Mysql_Datetime_Timestamp - Fatal编程技术网

插入到DATETIME时发生java.sql.Timestamp错误

插入到DATETIME时发生java.sql.Timestamp错误,java,mysql,datetime,timestamp,Java,Mysql,Datetime,Timestamp,在MySQL 5.6中,当我尝试使用java.sql.Timestamp值插入DATETIME列时,总是会出现以下错误: com.mysql.jdbc.MysqlDataTruncation:数据截断:第1行“发票日期”列的日期时间值“”不正确 该项目的原始开发人员有定制的JAR来创建准备好的语句,例如java.util.Date被转换成时间戳,插入到DATETIME中,反之亦然,以及处理数据库连接。请注意,这是我的假设,因为没有关于它的文档。尝试使用时间戳通过PreparedStatement

在MySQL 5.6中,当我尝试使用java.sql.Timestamp值插入DATETIME列时,总是会出现以下错误:

com.mysql.jdbc.MysqlDataTruncation:数据截断:第1行“发票日期”列的日期时间值“”不正确

该项目的原始开发人员有定制的JAR来创建准备好的语句,例如java.util.Date被转换成时间戳,插入到DATETIME中,反之亦然,以及处理数据库连接。请注意,这是我的假设,因为没有关于它的文档。尝试使用时间戳通过PreparedStatement插入DATETIME时,得到了相同的结果,如下所示:

ps.setTimestamp(3,新的时间戳(date.getTime())

我必须创建自己的连接,以便使用java.sql.Date来解决这个问题。但是,它会将时间值归零。我曾经

ps.setDate(3,新的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上测试该驱动程序是值得的。最后,您没有在setters中传递索引,错误的datetime值是空字符串。是否已在调试器/日志中验证您没有尝试插入空字符串?

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

哦,对不起,我在键入这些示例行时忘记了包含索引。代码本身有一个索引,日志显示它们有价值。我实际上在5.0和5.6上使用相同的jdbc驱动程序。DATETIME类型将接受字符串吗?我认为它必须是日期或时间戳之类的日期类型,只是尝试格式化时间戳并使用该字符串,这在我的测试中很有效。谢谢你的帮助!仍然有一个问题,那就是我必须为此建立自己的数据库连接,但由于自定义JAR,这是没有帮助的。我会做一些修改,使它在5.0和5.6上都能工作。哦,对不起,我在键入这些样本行时忘记了包含索引。代码本身有一个索引,日志显示它们有价值。我实际上在5.0和5.6上使用相同的jdbc驱动程序。DATETIME类型将接受字符串吗?我认为它必须是日期或时间戳之类的日期类型,只是尝试格式化时间戳并使用该字符串,这在我的测试中很有效。谢谢你的帮助!仍然有一个问题,那就是我必须为此建立自己的数据库连接,但由于自定义JAR,这是没有帮助的。我只做修改,使其在5.0和5.6上都能工作。我不能在PreparedStatement中使用java.util.Date。必须首先将其转换为java.sql.Date。我不能在PreparedStatement中使用java.util.Date。必须首先将其转换为java.sql.Date。