【发布时间】:2023-03-23 21:35:01
【问题描述】:
我知道java.sql.Timestamp 不接受'0000-00-00 00:00:00' 作为值(有充分的理由)。但是我正在处理的数据库是用 PHP 和其他工具创建的,这似乎并不在意。
我想要什么
我想要的是将数据从一个数据库复制到另一个数据库,并在执行此操作时即时更改一些值(例如 Timestamp 0000-00-00)
如何
我首先SELECT 将整个数据放入Object[] 中。它必须是Object,因为无论类型如何,我都必须将每个值都存储在该数组中。
稍后我会将Object 转换为字符串,以便将其插入数据库中
问题
正如我所说,我想摆脱 '0000-00-00 00:00:00' 时间戳,所以我需要检查我的 Timestamp 是否等于 '000...'。
但是为了查看我的Object 中存储了什么值,我需要将其转换为Timestamp,这就是java.sql.SQLException 被抛出以警告我0000.... 不能转换为时间戳的地方。
代码(此方法返回一个与 INSERT-Query 的其余部分连接的字符串)
Object column = row[columnIndex]; // column contains the value I want to check
if (column == null) { // when its a NULL I insert my dummy value
return "'0000-01-01 00:00:00'";
}
// here is the problem: to check if the value is 0000... I need to cast the object
// to a Timestamp.. but that's not allowed
if (((Timestamp) column).toString().equalsIgnoreCase("0000-00-00 00:00:00")) {
return "'0000-01-01 00:00:00'";
}
// when its neither null nor '0000... ' return the value as it is
String timestampString = ((Timestamp) column).toString();
return "'" + timestampString + "'";
抱歉,解释太长了。
简短问题
如何检查时间戳是否等于 '0000-00-00 00:00:00' 而无需将我的 Object 转换为 Timestamp ?
【问题讨论】:
-
简单地更改您的 SQL 语句以适应您的条件怎么样?这样您就可以每次都返回一个有效的时间戳?我不确定你的 SQL 方言,但也许你可以用
NVL解决它? -
你可以告诉 MySQL 驱动为这样的时间戳返回 NULL
-
您的意思是在 SELECT 语句中检查 0000?像 SELECT IF(column='0000-00-00','0000-01-01',column)... ?
-
是的,类似的。抱歉,我刚刚看了mysql标签...但是a_horse_with_no_name可能已经给出了一个很好的解决方案!
-
这是一个名为
zeroDateTimeBehavior的连接属性,详情请看这里:dev.mysql.com/doc/connector-j/en/…