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

发布于 2024-12-23 10:06:37 字数 110 浏览 2 评论 0原文

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

I know what optimistic and pessimistic locking is, but when you write a java code how do you do it? Suppose I am using Oracle with Java, do I have any methods in JDBC that will help me do that? How will I configure this thing? Any pointers will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不疑不惑不回忆 2024-12-30 10:06:37

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

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

您的更新应该如下所示

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

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

希望这有帮助。

You can implement optimistic locks in your DB table in this way (this is how optimistic locking is done in Hibernate):

  1. Add integer "version" column to your table.
  2. Increase the value of this column with each update of corresponding row.
  3. To obtain lock, just read "version" value of the row.
  4. Add "version = obtained_version" condition to where clause of
    your update statement. Verify number of affected rows after update.
    If no rows were affected - someone has already modified your entry.

Your update should look like

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

Of course, this mechanism works only if all parties follow it, contrary to DBMS-provided locks that require no special handling.

Hope this helps.

吃不饱 2024-12-30 10:06:37

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

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

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

Suppose I am using Oracle with Java, do I have any methods in JDBC that will help me do that?

This Oracle paper should provide you with some tips on how to do this.

There are no specific JDBC methods. Rather, you achieve optimistic locking by the way that you design your SQL queries / updates and where you put the transaction boundaries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文