為ContentProvider新增資料庫事務支援

2021-08-27 16:57:59 字數 785 閱讀 4875

介紹:資料庫事務是由一組資料庫操作序列組成,事務作為乙個整體被執行。

事務的原子性:包含在其中的對資料庫的操作序列最終要麼全部執行,要麼全部不執行。當全部執行時,事務對資料庫的修改將生效;當全部不執行時,資料庫維持原有的狀態,不會被修改。

問題:最近在做乙個從sdcard匯入資料到資料庫的功能,當匯入失敗時,資料庫要恢復到匯入前的狀態。使用資料庫事務處理能很好地滿足到我們的需求。

我們知道android平台上使用的sqlite資料庫是支援事務處理功能的,實現的**如下:

view plain

sqlitedatabase db =mopenhelper.getwritabledatabase(); 

db.begintransaction();//開始事務 

//進行insertdelete update等資料庫操作 

db.settransactionsuccessful();//設定事務標記為successful 

db.endtransaction();//提交事務 

可是,對於已經封裝成contentprovider的sqlite我們應該如何讓其支援事務處理功能呢?

謹慎起見我們先來看看contentprovider的原始碼,最後追蹤到這個方法:

從上面的**中,我們找不到和db.begintransaction()、db.endtransaction()相似的方法,也就是說,這個方法只是進行簡單的批處理,並沒有保障這些資料庫操作的原子性。

總結:1、sqlite支援事務處理操作

作者「lzc的專欄」

吃水不忘挖井人:

較深入的分析Content Providers用法

之前的教程 android平台上四種儲存資料的方法 中有討論過android平台上四種儲存資料的方法以及需要著重注意的特性。android嚴格控制了資料的安全使用規範,為此建立在各種儲存模組中的資料依然是私有於其相對應的程式。有簡單提及應用content providerscontent provi...

聯絡人的獲取 ContentProvider

contentprovider 1 contentprovider為儲存和讀取資料提供統一的介面 2 使用contentprovider,應用程式可以實現資料共享 uri universal resource identifier e.g 聯絡人uri 為content contacts peopl...

建立乙個新的Content Provider

通過擴充套件 contentprovider 類來建立乙個新的 content provider 重寫oncreate 方法來開啟或初始化你要通過這個 provider 提供的底層資料來源。新的 content provider 的框架 如下所示 import android.content.imp...