如何从Java锁定数据库记录?

时间:2013-07-02 14:11:39

标签: java mysql sql

我正在使用MySQL开发Java数据库程序。我需要知道如何从Java端锁定数据库记录。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

通常,如果您在EE环境中,可以使用JPA EntityManager#find()方法锁定某些记录。

完全使用就像那样

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

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

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