Пакетное удаление элементов с помощью Content Provider на Android

Я пытаюсь удалить несколько элементов в таблице.

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

Однако я продолжаю получать следующую ошибку

Java.lang.IllegalArgumentException: слишком много аргументов bind. Было предоставлено 3 аргумента, но для утверждения требуется 1 аргумент.

Ошибка возникает из-за того, что у вас есть один placeholder (?) В вашем предложении where, в то время как вы передаете три аргумента. Ты должен сделать:

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

Я не знаю, поддерживает ли SQLite предложение IN, если вы так же можете сделать:

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

Вы можете использовать ContentProviderOperation для пакетного удаления / вставки / обновления в одной транзакции. Гораздо приятнее, что вам не нужно конкатенировать строки. Это также должно быть очень эффективным. Для удаления:

  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) { }