簡體   English   中英

ormLite callInTransaction是否鎖定數據庫?

[英]Does ormLite callInTransaction lock the database?

我想知道ormLite在執行事務時是否鎖定了數據庫。 我有桌子:

key | value
AA  | 1
BB  | 1

我正在運行兩個數據庫操作。 一個修改多個條目:

new Callable<Void>() {
    public Void call() throws SQLException {
        pairAA = new DbEntry("AA", 2);
        pairBB = new DbEntry("BB", 2);
        dao.createOrUpdate(pairAA);
        dao.createOrUpdate(pairBB);

        return null;
    }
}

如果我嘗試在不同的線程上運行第一個,則使用TransactionManager.callInTransaction()是否可能由於sumAllValues(dao.queryAll())的結果而獲得3? 在不同的線程上運行意味着JVM可能會嘗試在createOrUpdate(pairAA)createOrUpdate(pairBB)之間執行queryAll() createOrUpdate(pairBB) 這意味着AA變為2,查詢讀取時BB仍為1。 還是事務管理器會在可調用對象的整個執行過程中鎖定該表/數據庫,從而使查詢不可能發生(僅允許在可調用對象之前或之后進行查詢)?

TransactionManager.callInTransaction()關閉自動提交,並在執行call()方法后提交更改;如果call()方法拋出異常,則回滾更改。

因此,無法通過您描述的queryAll()獲得情況。 此外,Android SQLite允許多個讀取器,但一次僅允許一個寫入器。詳細信息: https : //stackoverflow.com/a/7740305/2055854

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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