【问题标题】:Use "zero" timestamp in a MySQL JDBC prepared statement (in WHERE clause)在 MySQL JDBC 准备语句中使用“零”时间戳(在 WHERE 子句中)
【发布时间】:2013-08-12 13:09:47
【问题描述】:

我的问题是我不知道如何创建一个代表'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 对象是问题所在。 :)

【问题讨论】:

  • 这个“零日期”值用于无效的日期/时间值并且不使用 NULL?如何从“未设置的值”中识别“无效值”?
  • 为什么不想使用NULL?

标签: java mysql jdbc prepared-statement


【解决方案1】:

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;否则驱动程序将在从数据库中获取值时抛出异常。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多