2012-07-19 62 views
2

我有一個經典的場景:對同一條記錄的兩次更新都基於此記錄中以前的就緒值。 我在樂觀併發的假設下工作。我自己實現條件更新並不困難,問題是我是否可以依賴驅動程序中的某個API或爲我處理它的數據庫?對樂觀併發的數據庫支持

當然,我GOOGLE了它,但我似乎拿出的是什麼樂觀併發的解釋,就不能不提代碼樣本...

我使用JDBC數據的直接驅動。

謝謝!

回答

3

不,JDBC不支持樂觀併發。 JPA通過在表中使用專用version列來處理樂觀併發,並在每次更新時遞增版本值。更新查詢看起來是這樣的:

update foo set ..., version = version + 1 
where id = :theId and version = :theVersionLoadedInMemory 

如果executeUpdate()返回0而不是1,這意味着別人刪除的記錄,或更新它,從而增加了版本。

+0

謝謝你的回答。但是,我偶然發現了這一條文檔: http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/resultset.html 5.1.8節併發類型聲明「爲了實現更高級別的併發性,可以實現可更新的結果集,以便它使用樂觀併發控制方案「m \」,暗示某些驅動程序可能選擇將其實現爲OOTB。 – Vitaliy 2012-07-19 18:48:53