Android 數據庫批量操作
爲了方便數據庫的批量更新、刪除、插入操作,android系統引入了ContentProviderOperation類。
使用這個類具有以下優點:
1.數據完整性,即所有的操作都在一個事務中執行。
2.由於批量操作在一個事務中執行,只需要打開和關閉一個事務,比多次開關性能要好
3.相比單次操作,批量操作可以提升應用的性能,並且減少佔用CPU的時間,減少電量的消耗。
創建ContentProviderOperation對象,則需要使用ContentProviderOperation.Builder類,通過調用以下靜態函數獲取Builder對象:
newInsert() 創建一個用於執行插入操作的Builder
newUpdate() 創建一個用於執行更新操作的Builder
newDelete() 創建一個用於執行刪除操作的Builder
示例操作:
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ContentResolver resolver = context.getContentResolver();
try {
//數據進行批量操作
for(int i = 0;i < list.size();i++){
ContentValues values = new ContentValues();
values.clear();
values.put(ContentManagerContract.BookOodCards.BOOK_ID, Integer.parseInt(list.get(i).getBook_id()));
values.put(ContentManagerContract.BookOodCards.OOD_CARD_ID, id);
values.put(ContentManagerContract.BookOodCards.TYPE, CollectType.get(i));
ops.add(ContentProviderOperation.newInsert(ContentManagerContract.BookOodCards.CONTENT_URI).withValues(values).build());
}
if (ops.size() > 0) {
//CONTENT_AUTHORITY:數據庫的創建路徑
resolver.applyBatch(CONTENT_AUTHORITY, ops);
ops.clear();
}
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "insertTpIntoOpsList: Exception !!!");
}
Builder設計模式,Builder對象核心函數
withSelection(String selection, String[] selectionArgs)
指定需要操作的數據條件,只在更新、刪除操作中有用
withValue(String key, Object values)
定義一列的數據值,只在更新、插入數據有用
withValues(ContentValues values)
定義多列的數據值,只在更新、插入數據有用
withYieldAllowed(boolean)
withValueBackReference(String key, int previousResult)