9

我知道乐观锁和悲观锁是什么,但是当你写一个java代码时你是怎么做的呢?假设我在 Java 中使用 Oracle,我在 JDBC 中是否有任何方法可以帮助我做到这一点?我将如何配置这个东西?任何指针将不胜感激。

4

2 回答 2

15

您可以通过这种方式在您的 DB 表中实现乐观锁(这是在 Hibernate 中完成乐观锁的方式):

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

您的更新应如下所示

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

当然,这种机制只有在各方都遵循它的情况下才有效,这与 DBMS 提供的不需要特殊处理的锁相反。

希望这可以帮助。

于 2012-01-16T13:46:55.630 回答
3

假设我在 Java 中使用 Oracle,我在 JDBC 中是否有任何方法可以帮助我做到这一点?

这篇 Oracle 论文应该为您提供一些有关如何执行此操作的提示。

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

于 2012-01-01T06:52:21.947 回答