今天我遇到了这种情况:程序启动,正常工作,显示数据已正确输入数据库的消息,但它没有这样做。我再次运行脚本并且工作正常,但有趣的是它虽然无法插入数据但它没有抛出异常。
是否存在Statement.executeUpdate(insertQuery)失败而不抛出异常的情况?
答案 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
}