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)