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

如何从java代码中编写乐观锁和悲观锁,java,database,jdbc,optimistic-locking,pessimistic-locking,Java,Database,Jdbc,Optimistic Locking,Pessimistic Locking,我知道什么是乐观锁和悲观锁,但当您编写java代码时,您是如何做到的?假设我将Oracle与Java结合使用,那么JDBC中是否有任何方法可以帮助我做到这一点?我将如何配置这个东西?任何指点都将不胜感激 假设我将Oracle与Java结合使用,那么JDBC中是否有任何方法可以帮助我做到这一点 应该为你提供一些如何做到这一点的提示 没有特定的JDBC方法。相反,您可以通过设计SQL查询/更新以及将事务边界放在何处来实现乐观锁定。您可以通过这种方式在DB表中实现乐观锁定(这就是在Hibernate中

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

假设我将Oracle与Java结合使用,那么JDBC中是否有任何方法可以帮助我做到这一点

应该为你提供一些如何做到这一点的提示


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

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

  • 将整数“版本”列添加到表中
  • 随着相应行的每次更新,增加此列的值
  • 要获得锁,只需读取行的“version”值
  • 将“版本=获得的版本”条件添加到 你的更新声明。验证更新后受影响的行数。 如果没有行受到影响-有人已经修改了您的条目
  • 您的更新应该如下所示

    UPDATE mytable SET name = 'Andy', version = 3 WHERE id = 1 and version = 2
    
    当然,与DBMS提供的不需要特殊处理的锁相反,这种机制只有在各方都遵循它的情况下才能工作


    希望这能有所帮助。

    Java锁定和JDBC在某种程度上与您所寻找的方式无关。你想解决的问题是什么?Java锁是可重入锁,可通过使用“synchronized”关键字获得。那么,你到底在寻找什么呢?我在寻找数据库锁定