9

我正在尝试批量删除表中的某些项目。

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

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

但是我不断收到以下错误

java.lang.IllegalArgumentException:绑定参数过多。提供了 3 个参数,但该语句需要 1 个参数。

4

3 回答 3

21

您可以在一个事务中使用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) {

    }
于 2014-04-02T21:36:55.163 回答
10

发生错误是因为您的 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);
于 2012-07-12T19:04:00.153 回答
0
String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3);

db.execSQL(sqlCommand);
于 2017-12-02T15:06:58.597 回答