使用HSQLDB进行悲观行锁定

时间:2014-02-24 01:53:50

标签: java database locking hsqldb

我需要在表中显式锁定一行连接,其中包括:

  • 读入数据;
  • (某些逻辑将在两者之间运行)
  • 更新数据库中的相应行;

虽然其他连接无法读取数据,但禁用脏读(因此ISOLATION级别是不可能的)。

阅读documentation,但不完全理解它。我目前的理解是否正确:

  • 将并发控制模型设置为MVCC;
  • 将事务隔离级别设置为READ COMMITTED(实际上已经默认);
  • 为手中的Connection对象设置autocommit值为false;
  • create Statement / PreparedStatement;
  • 对语句或PreparedStatement对象运行'SELECT / - / FOR UPDATE'查询并接收ResultSet;
  • - 执行一些逻辑 -
  • 使用ResultSet updateX()方法或新的UPDATE sql(executeUpdate())更新行。
  • 提交更改。

是否有任何步骤是多余的,遗漏或我完全误解了整个概念?

1 个答案:

答案 0 :(得分:0)

执行此操作的正确方法是在开头和结尾更新行。创建声明的步骤如下。

  • 创建声明
  • 使用现有值更新行(如果此时已知,则更改值)
  • 执行其他操作
  • 更新具有更改值的行(如果之前未执行)
  • 提交

如果你不像上面那样做,另一个交易可能会在此交易改变之前更改该行。