ContentProvider - 重写bulkInsert()方法

默认重写bulkInsert方法

    @Override
    public int bulkInsert(Uri uri, ContentValues[] values) {
        return super.bulkInsert(uri, values);
    }

bulkInsert()方法内部实现

/**
* Override this to handle requests to insert a set of new rows, or the
* default implementation will iterate over the values and call
* {@link #insert} on each of them.
* As a courtesy, call {@link ContentResolver#notifyChange(android.net.Uri ,android.database.ContentObserver) notifyChange()}
* after inserting.
* This method can be called from multiple threads, as described in
* Processes
* and Threads.
*
* @param uri The content:// URI of the insertion request.
* @param values An array of sets of column_name/value pairs to add to the database.
*    This must not be {@code null}.
* @return The number of values that were inserted.
*/
public int bulkInsert(Uri uri, ContentValues[] values) {
    int numValues = values.length;
    for (int i = 0; i < numValues; i++) {
        insert(uri, values[i]);
    }
    return numValues;
}

重写bulkInsert() - 事务处理

/**
 * 批量插入,调用方法如下:
 *
 * ContentValues[] arrayValues = new ContentValues[10];
 * //实例化每一个ContentValues
 * int count = resolver.bultInsert(Student.CONTENT_URI,arrayValues);
 *
 * @param uri
 * @param values
 * @return
 */
@Override
public int bulkInsert(Uri uri, ContentValues[] values) {
    //return super.bulkInsert(uri, values);
    int numValues = 0;
    db.beginTransaction(); //开始事务
    try {
        //数据库操作
        numValues = values.length;
        for (int i = 0; i < numValues; i++) {
            insert(uri, values[i]);
        }
        db.setTransactionSuccessful(); //别忘了这句 Commit
    } finally {
        db.endTransaction(); //结束事务
    }
    return numValues;
}

你可能感兴趣的:(ContentProvider - 重写bulkInsert()方法)