0

我实现了 ContentProviderbulkInsert()方法以在事务内的表中插入大量行,但之后我需要在不同的表中进行更新,并且我只想在提交批量插入时这样做。这两个操作需要是原子的,要么做要么不做,我该怎么做?

这是 bulkInsert 方法:

@Override
public int bulkInsert(Uri uri, ContentValues[] values){

    int nrInserted = 0;
    String TABLE;

    int uriType = mUriMatcher.match(uri);


    switch (uriType){
        case FEEDS:
            TABLE = FeedsProviderContract.TABLE_NAME;
            break;
        default:
            throw new IllegalArgumentException( "Unknown URI: " + uri );
    }

    SQLiteDatabase db = mDbHelper.getWritableDatabase();

    //Begin inner transaction
    db.beginTransaction();

    try {

        for (ContentValues cv : values){

            db.insertOrThrow(TABLE, null, cv);

            nrInserted++;
        }

        db.setTransactionSuccessful();

        getContext().getContentResolver().notifyChange(uri,null);

    } catch (SQLException ex){

        ex.printStackTrace();

    }
    finally {
        db.endTransaction();
    }

    return nrInserted;
 }

现在当我打电话给它时,我可以进行这样的外部交易吗?我想这行不通。

...

//Begin outer transaction

getContentResolver().getContentProvider().bulkInsert(...);

//Update the other table

//End  outer Transaction
4

1 回答 1

0

我需要的是 ApplyBatch 而不是 BulkInsert,它现在可以按我的意愿工作。

于 2013-09-30T11:13:33.863 回答