Как сравнить две точки сохранения программно?

Я хочу сравнить две точки сохранения и проверить, были ли какие-либо изменения в базе данных между ними. Например, рассмотрим следующий фрагмент кода

 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 ответа

Отправка решения моего вопроса, который работал для меня.

Я использовал тот факт, что точка сохранения будет очищена, если после нее будет какая-либо операция фиксации. Следовательно, откат к той же самой точке сохранения приведет к ошибке, что точка сохранения никогда не была установлена. Если он был успешно откатан, это означало бы, что между ними не было операции фиксации.

Самым простым способом было бы иметь объект Stack, куда вы помещаете текущую операцию в нечто вроде DBOperationStack.push(new String[]("OPERATION_TYPE", "OPERATION_NAME", CURRENT_TIMESTAMP)),[Это простой псевдокод, изменение структуры данных, области видимости, параллелизма и т. Д.]

Вы можете добавить строку выше, где это необходимо для работы базы данных.

Когда вы достигнете savepoint_2, peek из стека и проверьте, если это точка сохранения_1, если нет, то между ними могут быть некоторые операции, такие как обновление, вставка и т. д., самая последняя.

COMMIT,    PROCESS_XYZ, 2016-01-29 15:03:08.713
SAVEPOINT, SAVEPOINT_1, 2016-01-29 15:02:08.713
Другие вопросы по тегам