답변

9

오류는 세 개의 인수를 전달하는 동안 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); 
+0

감사 1월 나는 내가 selectionArgs 근무 방법에 대한 근본적인 오해가 있었다 같아요. 내 ID는 크기가 가변적 일 수 있습니다. 따라서 두 번째 솔루션은 더욱 매력적입니다. 그러나, 나는 그것도 작동하지 않는 것 같습니다. 그냥 내 크기를 확인하고 루프를 구성하여 어디에서 클레스를 구성 할 수 있는지 생각해 보겠습니다. ( –

19

당신은 하나의 트랜잭션 내에서 일괄 삭제/삽입/업데이트 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) { 

    } 
+0

올바른지, 'BulkInsert'가 더 빠르면이 ApplyBatch가 sms 조작을 위해 – Anuj

+0

인지 확인하십시오. 노래 조작을 위해''sms "' –

+0

이고, AUTHORITY id 'MediaStore.AUTHORITY' –

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

db.execSQL(sqlCommand); 
관련 문제