Как кодировать оптимистическую и пессимистическую блокировку из кода Java

Я знаю, что такое оптимистичная и пессимистичная блокировка, но когда вы пишете код на Java, как вы это делаете? Предположим, я использую Oracle с Java, есть ли у меня какие-либо методы в JDBC, которые помогут мне в этом? Как я буду настраивать эту штуку? Любые указатели будут оценены.


person user2434    schedule 01.01.2012    source источник
comment
Блокировка Java и JDBC не связаны так, как вы ищете. Какую проблему вы пытаетесь решить? Блокировки Java — это блокировки с повторным входом, которые можно получить с помощью ключевого слова «синхронизированный». Итак, что именно вы ищете?   -  person Pavan    schedule 01.01.2012
comment
я ищу блокировку базы данных   -  person user2434    schedule 01.01.2012


Ответы (2)


Вы можете реализовать оптимистичные блокировки в своей таблице БД следующим образом (вот как оптимистическая блокировка выполняется в Hibernate):

  1. Добавьте целочисленный столбец «версия» в вашу таблицу.
  2. Увеличивайте значение этого столбца при каждом обновлении соответствующей строки.
  3. Чтобы получить блокировку, просто прочитайте значение «версия» строки.
  4. Добавьте условие «версия = полученная_версия» в предложение where вашего оператора обновления. Проверьте количество затронутых строк после обновления. Если ни одна строка не была затронута, значит кто-то уже изменил вашу запись.

Ваше обновление должно выглядеть так

UPDATE mytable SET name = 'Andy', version = 3 WHERE id = 1 and version = 2

Конечно, этот механизм работает только в том случае, если все стороны следуют ему, в отличие от блокировок, предоставляемых СУБД, которые не требуют специальной обработки.

Надеюсь это поможет.

person Andrei Petrenko    schedule 16.01.2012

Предположим, я использую Oracle с Java, есть ли у меня какие-либо методы в JDBC, которые помогут мне в этом?

В этом документе Oracle вы найдете несколько советов о том, как это сделать.

Конкретных методов JDBC не существует. Скорее, вы достигаете оптимистичной блокировки тем, как вы разрабатываете свои SQL-запросы/обновления и устанавливаете границы транзакций.

person Stephen C    schedule 01.01.2012