Batch Delete items with Content Provider in Android

后端 未结 3 1766
长发绾君心
长发绾君心 2021-01-04 19:40

I\'m trying to batch delete some items in a table.

    String ids = { \"1\", \"2\", \"3\" };

    mContentResolver.delete(uri, MyTables._ID + \"=?\", ids);
<         


        
相关标签:
3条回答
  • 2021-01-04 20:24

    The error occurs because you have a single placeholder (?) in your where clause, while you pass three arguments. You should do:

    String ids = { "1", "2", "3" };
    
    mContentResolver.delete(uri, MyTables._ID + "=? OR " + MyTables._ID + "=? OR " + MyTables._ID + "=?", ids);
    

    I do not know if SQLite supports the IN clause, if so you could also do:

    String ids = { "1, 2, 3" };
    
    mContentResolver.delete(uri, MyTables._ID + " IN (?)", ids);
    
    0 讨论(0)
  • 2021-01-04 20:28

    You can use ContentProviderOperation for batch deletion/insertion/update in one transaction. It's much nicer you don't have to concatenate strings. It also should be very efficient. For deletion:

        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
        ContentProviderOperation operation;
    
        for (Item item : items) {
    
            operation = ContentProviderOperation
                    .newDelete(ItemsColumns.CONTENT_URI)
                    .withSelection(ItemsColumns.UID + " = ?", new String[]{item.getUid()})
                    .build();
    
            operations.add(operation);
        }
    
        try {
            contentResolver.applyBatch(Contract.AUTHORITY, operations);
        } catch (RemoteException e) {
    
        } catch (OperationApplicationException e) {
    
        }
    
    0 讨论(0)
  • 2021-01-04 20:33
    String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3);
    
    db.execSQL(sqlCommand);
    
    0 讨论(0)
提交回复
热议问题