Trả lời

9

Lỗi xảy ra vì bạn có một trình giữ chỗ duy nhất (?) Trong mệnh đề where, trong khi bạn chuyển ba đối số. Bạn nên làm:

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

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

Tôi không biết nếu SQLite hỗ trợ mệnh đề IN, nếu có thì bạn cũng có thể làm:

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

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

Nhờ Tháng Một Tôi đoán tôi đã có một sự hiểu lầm cơ bản về cách thức selectionArgs làm việc. Id của tôi có thể thay đổi về kích thước. Vì vậy, giải pháp thứ hai của bạn trông hấp dẫn hơn. Tuy nhiên, tôi e rằng điều đó dường như không có tác dụng. Tôi cho rằng tôi chỉ có thể kiểm tra kích thước và vòng lặp của mình để tạo cấu trúc cho phép, nhưng điều đó không có vẻ tốt đẹp: ( –

19

Bạn có thể sử dụng ContentProviderOperation để xóa hàng loạt/chèn/cập nhật trong một giao dịch . Nó đẹp hơn nhiều, bạn không cần phải nối chuỗi. Nó cũng sẽ rất hiệu quả. Để xóa:

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

    } 
+0

Đúng, tôi có truy vấn này cho dù 'BulkInsert' nhanh hơn' ApplyBatch' – Anuj

+0

cho hoạt động sms là "" sms "' –

+0

cho hoạt động bài hát, id AUTHORITY 'MediaStore.AUTHORITY' –

0
String sqlCommand = String.format("DELETE FROM %s WHERE %s IN (%s);", TABLE_NAME, KEY_ID, 1,2,3); 

db.execSQL(sqlCommand); 
Các vấn đề liên quan