6

我正在用 dbf 用 Ja​​va 开发一个数据库程序。我需要知道如何从 Java 端锁定数据库记录。

示例:我们有一个数据库表,表中cheques有 5 条记录(record 1通过5)。有 2 个用户,user-1user-2. user-1同时访问record 1user-2尝试访问record 1。我想锁定record 1以防止在访问该记录user-2user-1访问它。我如何在 Java 中做到这一点?

4

3 回答 3

4

在 MySQL 的情况下,您可以使用SELECT FOR UPDATE语句来锁定记录。在事务完成或回滚之前,不会释放锁。更多关于相同的here

于 2013-07-02T14:30:59.253 回答
1

这取决于您工作的环境。对于容器管理的事务,您的容器会为您管理事务,您所要做的就是将 Lockmode 设置为 lockmode.write。这样做的目的是在 userA 访问记录 1 时阻止对类方法的所有写访问。另一方面,对于独立应用程序,您只需将 Synchronization 关键字添加到您的方法中即可控制并发访问。我希望这有帮助。

于 2013-07-02T14:23:59.160 回答
0

并非每个数据库都支持按记录锁定。

一般来说,如果你在 EE 环境中,你可以使用 JPA EntityManager#find()方法来锁定某些记录。

完全使用会这样

// EntityManager em;
YourClass obj = em.find(YourClass.class, primaryKey, LockModeType.WRITE);
// do something
em.merge(obj);

事务提交后,记录将被释放。

正如 Darshan Mehta 所说,在非 EE 环境中,这connection.createStatement().execute("SELECT * FROM table FOR UPDATE")将是解决方案。

于 2013-07-02T15:17:04.627 回答