ho lottato per ore cercando di eseguire il debug il motivo per cui la seguente query di eliminazione in realtà non ha cancellato nulla, anche se la stessa interrogazione sullo stesso identico base di dati ha funzionato bene in Firefox' SQLite Manager:Perché una cancellazione rawQuery ha bisogno di moveToFirst per eliminare effettivamente le righe?
String deleteSql = "DELETE FROM showsummary WHERE url IN (SELECT url FROM showsummary JOIN article_categories USING (url) WHERE categoryid=20 AND title LIKE 'page=%')";
mDb.rawQuery(deleteSql, null);
Dal momento che è un po 'complicato sia con un JOIN che con una sottoquestione, i miei pensieri cerchiavano alcune limitazioni nell'implementazione sqlite di Android per quanto riguarda le sottoquery, quindi ho provato a semplificare la query. Ma ancora non ha cancellato nulla.
Poi ho cambiato in una query di selezione (appena sostituito CANCELLA con SELECT *) e che ha funzionato. Quindi, probabilmente, non era il join o la query secondaria a essere il colpevole, dopotutto.
Al fine di testare la query di selezione che avevo aggiunto un moveToFirst()
al cursore tornato:
mDb.rawQuery(deleteSql, null).moveToFirst();
Quando più tardi ho cambiato di nuovo a una query di eliminazione di nuovo, ho dimenticato di togliere il moveToFirst()
e poi lavorato!
È bello che funzioni ora, ma sono molto confuso perché è necessario spostare il cursore per eliminare effettivamente qualsiasi cosa. È questo di progettazione o è un bug?
ho appena ucciso 4 ore su questo muto un problema **, si dovrebbe avere questo chiaramente indicato nella documentazione, che spreco di tempo. – LuckyMe
Mi piace come la tua domanda contenga una risposta ai miei problemi di cancellazione, molto efficiente! – Noumenon
Grazie per aver trovato questo. Questo dovrebbe essere sicuramente documentato! Non dovrebbe essere così, penso, ma almeno funziona ora. – kgrevehagen