2012-01-01 108 views
6

我知道什麼是樂觀鎖定和悲觀鎖定,但是當您編寫java代碼時,您是如何做到的?假設我在Java中使用Oracle,我有JDBC中的任何方法可以幫助我做到這一點嗎?我將如何配置這件事?任何指針將不勝感激。如何從java代碼編寫樂觀和悲觀鎖定

+0

Java鎖定和JDBC在您所查找的方式中無關。你試圖解決什麼問題? Java鎖是可以通過使用「同步」關鍵字獲得的重入鎖。 那麼,你到底在找什麼? – Pavan 2012-01-01 06:47:45

+0

我正在尋找數據庫鎖定 – user2434 2012-01-01 07:42:58

回答

3

假設我在Java中使用Oracle,在JDBC中是否有任何方法可以幫助我做到這一點?

This Oracle paper應爲您提供關於如何做到這一點的一些技巧。

沒有具體的JDBC方法。相反,您通過設計SQL查詢/更新以及放置事務邊界的方式實現樂觀鎖定。

11

您可以在這樣的數據庫表實現樂觀鎖(這是鎖定多麼樂觀在Hibernate中完成):

  1. 添加整數「版本」列到你的餐桌。
  2. 每次更新相應行時增加此列的值。
  3. 要獲得鎖定,只需讀取該行的「版本」值即可。
  4. 將「version = obtain_version」條件添加到更新語句的 的where子句中。驗證更新後受影響的行數。 如果沒有行受到影響 - 某人已經修改了您的條目。

你的更新應該像

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

當然,如果各方遵循它,相反,需要特殊的處理DBMS提供的鎖這個機制只。

希望這會有所幫助。