I\'m trying to batch delete some items in a table.
String ids = { \"1\", \"2\", \"3\" };
mContentResolver.delete(uri, MyTables._ID + \"=?\", ids);
<
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);
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) {
}
String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3);
db.execSQL(sqlCommand);