如何以编程方式比较两个保存点?

时间:2016-01-29 09:48:39

标签: java jdbc transactions savepoints

我想比较两个Savepoints,并检查两者之间是否有任何提交数据库。例如,请考虑以下代码段

 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

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

2 个答案:

答案 0 :(得分:0)

The most simplest way would be having a 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

答案 1 :(得分:0)

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

我使用了这样一个事实:如果在它之后有任何提交操作,保存点将被刷新。因此,回滚到同一个保存点会抛出一个从未建立保存点的错误。如果它成功回滚,那就意味着它们之间没有提交操作。