Java ExecuteUpdate失败并且不抛出异常

时间:2014-02-10 16:45:11

标签: java database-connection

今天我遇到了这种情况:程序启动,正常工作,显示数据已正确输入数据库的消息,但它没有这样做。我再次运行脚本并且工作正常,但有趣的是它虽然无法插入数据但它没有抛出异常。

是否存在Statement.executeUpdate(insertQuery)失败而不抛出异常的情况?

1 个答案:

答案 0 :(得分:4)

虽然如果不抛出异常就不会发生故障,但命令可以完成与您的期望不符的效果,但实际上没有失败。

例如,如果发出更新行的命令,但表中不存在您为更新指定的ID,则该命令在技术上会成功,但从您的角度来看,更新将失败,因为没有更改行:

PreparedStatement upd = con.prepareStatement(
    "UPDATE mytable SET complete=1 WHERE id=?"
);
upd.setInt(1, 12345); // If 12345 does not exist...
upd.executeUpdate();  // ...this update does not change anything

要检测这样的情况,您可以检查命令已更新的行数,并在更新次数为零时执行某些操作:

int changed = upd.executeUpdate();
if (changed != 1) {
    // Something didn't go according to our expectations
}