0

我想比较两个保存点并检查其间是否有对数据库的任何提交。例如,考虑以下代码片段

 Savepoint save1 = connection.setSavePoint("before);
 // some processing happens here, which can commit some changes to the DB.
 process();
 Savepoint save2 = connection.setSavePoint("after");

 // Now compare the two savepoints to see if there were any commits in process() method

现在我要探索的是:有没有一种方法可以以编程方式检查两个保存点之间是否有任何提交?

4

2 回答 2

0

发布对我有用的问题的解决方案。

我使用的事实是,如果在它之后有任何提交操作,保存点将被刷新。因此,回滚到同一个保存点会引发一个错误,即该保存点从未建立。如果它成功回滚,则意味着两者之间没有提交操作。

于 2016-02-09T21:41:01.360 回答
0

最简单的方法是拥有一个Stack对象,您可以在其中推送当前操作,例如DBOperationStack.push(new String[]("OPERATION_TYPE", "OPERATION_NAME", CURRENT_TIMESTAMP)). [这是纯伪代码,更改数据结构、范围、并发性等]

您可以在数据库操作需要的任何地方添加以上行。

当您到达savepoint_2时,peek从堆栈中检查它是否是savepoint_1,如果不是,那么它们之间可能会有一些操作,如更新、插入等。最近的操作。

COMMIT,    PROCESS_XYZ, 2016-01-29 15:03:08.713
SAVEPOINT, SAVEPOINT_1, 2016-01-29 15:02:08.713
于 2016-01-29T15:05:13.420 回答