我試圖批量刪除表中的一些項目。在Android中使用Content Provider批量刪除項目
String ids = { "1", "2", "3" };
mContentResolver.delete(uri, MyTables._ID + "=?", ids);
不過我老覺得下面的錯誤
java.lang.IllegalArgumentException異常:有太多的綁定參數。提供了3個參數,但聲明需要1個參數。
我試圖批量刪除表中的一些項目。在Android中使用Content Provider批量刪除項目
String ids = { "1", "2", "3" };
mContentResolver.delete(uri, MyTables._ID + "=?", ids);
不過我老覺得下面的錯誤
java.lang.IllegalArgumentException異常:有太多的綁定參數。提供了3個參數,但聲明需要1個參數。
發生此錯誤的原因是您在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) {
}
正確,我有這個查詢'BulkInsert'是否更快'ApplyBatch' – Anuj 2015-02-18 20:27:28
sms操作權限是用於歌曲操作的「sms」' – 2016-05-18 13:17:23
,AUTHORITY ID'MediaStore.AUTHORITY' – 2017-03-25 06:04:08
String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3);
db.execSQL(sqlCommand);
感謝一月我猜我的selectionArgs兩個是如何工作的一個根本性的誤解。我的ID可以是大小可變的。所以你的第二個解決方案看起來更吸引人不過,恐怕這似乎也不起作用。 我想我可以檢查我的大小和循環來構建那個clase,但那看起來不太好:( – 2012-07-12 19:12:40