[英]How do I lock database records from Java?
我正在用 dbf 用 Java 開發一個數據庫程序。 我需要知道如何從 Java 端鎖定數據庫記錄。
示例:我們有一個數據庫表cheques
表中的 5 條記錄( record 1
到5
)。 有 2 個用戶, user-1
和user-2
。 user-1
訪問record 1
, user-2
嘗試訪問record 1
。 我想鎖定record 1
以防止user-2
在user-1
訪問它時訪問該記錄。 我如何在 Java 中做到這一點?
在 MySQL 的情況下,您可以使用SELECT FOR UPDATE
語句來鎖定記錄。 在事務完成或回滾之前不會釋放鎖。 更多關於相同的here 。
這取決於您工作的環境。 對於容器管理的事務,您的容器會為您管理事務,您所要做的就是將 Lockmode 設置為 lockmode.write。 它的作用是在用戶 A 訪問記錄 1 時阻止對類方法的所有寫訪問。另一方面,對於獨立應用程序,您只需將 Synchronization 關鍵字添加到您的方法中即可控制並發訪問。 我希望這有幫助。
並非每個數據庫都支持按記錄鎖定。
一般在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")
將是解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.