Fra*_*aro 9 android android-contentresolver android-contentprovider
我正在尝试批量删除表中的一些项目.
String ids = { "1", "2", "3" };
mContentResolver.delete(uri, MyTables._ID + "=?", ids);
Run Code Online (Sandbox Code Playgroud)
但是我一直得到以下错误
java.lang.IllegalArgumentException:绑定参数太多.提供了3个参数但声明需要1个参数.
Xia*_*ang 20
您可以在一个事务中使用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) {
}
Run Code Online (Sandbox Code Playgroud)
Jan*_*enk 10
发生错误是因为在where子句中有一个占位符(?),而传递三个参数.你应该做:
String ids = { "1", "2", "3" };
mContentResolver.delete(uri, MyTables._ID + "=? OR " + MyTables._ID + "=? OR " + MyTables._ID + "=?", ids);
Run Code Online (Sandbox Code Playgroud)
我不知道SQLite是否支持IN子句,如果是这样,你也可以这样做:
String ids = { "1, 2, 3" };
mContentResolver.delete(uri, MyTables._ID + " IN (?)", ids);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5444 次 |
| 最近记录: |