Quando ho voglia di controllare e vedere se qualcosa esiste nella mia ContentProvider
quello che faccio di solito è qualcosa di simile a questoUsa inserire o sostituire in ContentProvider
Cursor c = getContentResolver().query(table,projection,selection,selectionArgs,sort);
if(c != null && c.moveToFirst()){
//item exists so update
}else{
//item does not exist so insert
}
ma che significa devo sempre fare, eventualmente, un database non necessaria chiamare rallentare le cose soprattutto il maggior numero di controlli sul database che devo fare. Ci deve essere un modo migliore per gestire questo, quindi non devo sempre interrogare prima.
ho guardato a questa domanda
Android Contentprovider - update within an insert method
ma utilizzando insertWithOnConflict
controlla solo l'id chiave primaria e nel mio caso che non funziona perché quello che sto controllando non è l'id, ma una stringa univoca da un database del server.
quindi c'è qualcosa che posso fare con il fornitore di contenuti quindi non devo sempre fare una query per verificare se l'elemento esiste già in esso?
Sei consapevole del comando "UPSERT" ** ** SOSTITUIRE? https://www.sqlite.org/lang_replace.html - Inserisce un nuovo record se non esistente o ne aggiorna uno esistente. –
@BobMalooga No Non sono a conoscenza di questo, ma è possibile utilizzarlo in un ContentProvider? tutto ciò che un fornitore di contenuti ha è inserire, aggiornare, sostituire o eliminare – tyczj
@tyczi No ... scusa, non ero a conoscenza dei limiti di ContentProvider. Ho pensato che potevi usare rawQuery o execSQL per ottenere e impostare i dati, rispettivamente. Ora sembra che ContentProvider sfortunatamente non offra queste strutture. Quindi, ho imparato qualcosa su ContentProviders (mai usato ancora - e probabilmente salterò in futuro). E ora sai che SQLite offre gli "upserts". ;) –