在 MySQL JDBC 准备好的语句中使用“零”时间戳(在 WHERE 子句中)

use*_*059 1 java mysql jdbc prepared-statement

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

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

`a_field_name` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
Run Code Online (Sandbox Code Playgroud)

我想做一个准备好的声明,删除日期时间为零的条目。

例子:

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

对象zeroTimestamp就是问题。:)

Jon*_*oni 6

JDBC对象无法表示MySQL 的Timestamp特殊全零日期。不过,您可以使用字符串:

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

noDatetimeStringSync=true如果您想恢复这些值,您还必须添加连接属性;否则驱动程序在从数据库获取值时会抛出异常。

请参阅此处“日期时间”部分的完整详细信息: https:
//dev.mysql.com/doc/connector-j/5.1/en/connector-j-installing-upgrading-3-0-to-3-1。 html