在mysql jdbc prepared语句中使用“零”时间戳(在where子句中)

时间:2013-08-10 21:12:28

标签: java mysql jdbc prepared-statement

我的问题是我不知道如何制作代表'0000-00-00 00:00:00'日期时间的java.sql.Timestamp对象。

我有一个数据库,其字段声明为:

`a_field_name` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

我想制作一个准备好的语句,删除日期时间为零的条目。 例如:

String sql = "DELETE from `table` WHERE a_field_name = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setTimestamp(1, zeroTimestamp);

zeroTimestamp对象就是问题所在。 :)

1 个答案:

答案 0 :(得分:3)

JDBC Timestamp对象不能代表MySQL的特殊全零日期。您可以使用字符串:

String sql = "DELETE from `table` WHERE a_field_name = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "0000-00-00 00:00:00");

如果要恢复这些值,还必须添加连接属性noDatetimeStringSync=true;否则,从数据库获取值时,驱动程序将抛出异​​常。请在此处查看完整详细信息:http://dev.mysql.com/doc/refman/5.6/en/connector-j-installing-upgrading.html