【问题标题】:How to code optimistic and pessimistic locking from java code如何从Java代码编写乐观和悲观锁定
【发布时间】:2012-01-31 06:39:56
【问题描述】:

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

【问题讨论】:

  • Java 锁定和 JDBC 与您所寻找的方式无关。您要解决的问题是什么? Java 锁是可重入锁,可以通过使用“同步”关键字获得。那么,您到底在寻找什么?
  • 我正在寻找数据库锁定

标签: java database jdbc optimistic-locking pessimistic-locking


【解决方案1】:

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

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

你的更新应该是这样的

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    This Oracle paper 应该会为您提供一些有关如何执行此操作的提示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2013-09-16
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多