JDBC 上的保存点

use*_*944 5 java oracle jdbc savepoints

我有一个 JDBC 代码,其中存在多个Savepoints;像这样的东西:

1st insert statement
2nd insert statement
savepoint = conn.setSavepoint("S1");
1st insert statement
2nd update statement
savepoint = conn.setSavepoint("S2");
1st delete statement
2nd delete statement
savepoint = conn.setSavepoint("S3");
1st insert statement
2nd delete statement
savepoint = conn.setSavepoint("S4");
Run Code Online (Sandbox Code Playgroud)

现在在 catch 块中,我捕获异常并检查异常是否Savepoint存在null;如果是,则回滚整个连接,否则回滚直到Savepoint. 但我不明白Savepoint我要回滚到哪一步。

如果我将所有保存点名称更改为“S1”可以吗?在这种情况下,我如何了解有多少收银机Savepoint正确工作?

请告知如何理解直到Savepoint正确执行了哪些工作?

MAD*_*MAD 5

会将其视为多个交易。因此,您可以使用多个 try/catch 块来处理此问题。您似乎还覆盖了保存点对象,因此回滚是不可行的。

更多信息。JDBC还支持设置保存点,然后回滚到指定的保存点。可以使用以下方法来定义保存点。

SavePoint savePoint1 = connection.setSavePoint();
Run Code Online (Sandbox Code Playgroud)

使用带参数的回滚调用将事务回滚到已定义的保存点。

connection.rollback(savePoint1);
Run Code Online (Sandbox Code Playgroud)

参考。 https://www.stackstalk.com/2014/08/jdbc-handling-transactions.html