Java ExecuteUpdate失败且未引发异常

use*_*904 1 java database-connection

今天,我遇到了这种情况:程序启动,照常工作,显示消息,表明数据已正确输入数据库,但没有执行。我再次运行了脚本,它运行良好,但有趣的是,尽管它未能插入数据,但它没有引发异常。

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

das*_*ght 5

尽管不引发异常就不会发生故障,但是命令可以完成与您的期望不符的效果,但不会真正失败。

例如,如果发出命令更新行,但表中不存在为更新指定的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
Run Code Online (Sandbox Code Playgroud)

要检测类似情况,您可以检查命令已更新了多少行,并在更新次数为零时执行以下操作:

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