簡體   English   中英

如何從 Java 鎖定數據庫記錄?

[英]How do I lock database records from Java?

我正在用 dbf 用 Ja​​va 開發一個數據庫程序。 我需要知道如何從 Java 端鎖定數據庫記錄。

示例:我們有一個數據庫表cheques表中的 5 條記錄( record 15 )。 有 2 個用戶, user-1user-2 user-1訪問record 1user-2嘗試訪問record 1 我想鎖定record 1以防止user-2user-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM