1
據我所知,調用SqliteOpendHelper.getWritableDatabase()
總是返回相同的實例SQLiteDatabase
。那麼與之相關的交易也不會受到影響?確實getWritableDatabase()影響交易
假設一個單線程環境,我使用一個單例SQLiteOpenHelper實例。假設我有很長的交易:
- 我打電話給
SQLiteDatabase.beginTransaction()
一次。 - DAO1構造函數調用
SqliteOpendHelper.getWritableDatabase()
。 - DAO1方法對其執行CRUD操作。
- DAO2構造函數調用
SqliteOpendHelper.getWritableDatabase()
。 - DAO2方法對其執行CRUD操作。
- ... on and on
- 我打電話給
SQLiteDatabase.endTransaction()
一次。
是否所有的DAO操作都在該單一事務中執行?如果多次調用getWritableDatabase()
以某種方式實現交易,我無法從source中找到答案。
我已經嘗試過使用單例方法,並且看到它不能以這種方式工作,如果您使用內容提供程序而不是DAO。即使爲SQLiteOpenHelper維護單例實例,並且通過contentprovider調用獲得相同的SQLiteDatabse實例,也不會像我們預期的那樣工作。交易必須在每個內容提供者調用中關閉。 – Aun 2014-11-04 07:25:06
@Aun很有趣。 YOu是否意味着如果你不在'ContentProvider'中結束它,事務就不會被提交? – faizal 2014-11-04 07:46:36
我已經調用API來提交事務。它不這樣工作。 所有進一步的CRUD呼叫都將被阻止。 – Aun 2014-11-04 07:50:26