如何从Java代码中编写乐观锁和悲观锁

10

我知道什么是乐观锁和悲观锁,但是在编写Java代码时,应该如何实现呢?假设我正在使用Java的Oracle,是否有JDBC中的方法可以帮助我实现这个过程?我应该如何进行配置?非常感谢您提供任何指导。


Java锁定和JDBC并不是你要寻找的相关内容。你试图解决什么问题?Java锁是可重入锁,可以使用“synchronized”关键字获得。那么,你到底在寻找什么? - Pavan
我正在寻找数据库锁定。 - user2434
2个回答

17

你可以按照以下方式在数据库表中实现乐观锁(这是Hibernate实现乐观锁的方法):

  1. 在您的表中添加一个整数“版本”列。
  2. 对应行每次更新时,增加此列的值。
  3. 要获得锁定,只需读取该行的“版本”值。
  4. 将“version = obtained_version”条件添加到您的更新语句的where子句中。在更新后验证受影响的行数。如果没有受影响的行 - 则表示其他人已经修改了您的条目。

您的更新语句应如下所示:

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

当然,这种机制只有在所有参与方都遵守时才能起作用,这与DBMS提供的锁定机制不同,后者不需要特殊处理。

希望能对您有所帮助。


3

假设我正在使用Java的Oracle,那么我是否有任何JDBC方法可帮助我实现这一点?

这篇Oracle文章应该为您提供如何实现此操作的一些提示。

没有特定的JDBC方法。相反,您通过设计SQL查询/更新的方式以及放置事务边界来实现乐观锁定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接