我一直在掙扎了幾個小時試圖調試爲什麼下面的刪除查詢居然沒有刪除任何東西,即使完全相同的數據庫上完全相同的查詢在Firefox」 SQLite的經理工作得很好:爲什麼刪除rawQuery需要moveToFirst才能真正刪除行?
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);
由於對於JOIN和子查詢有點複雜,我的想法圍繞着Android的關於子查詢的sqlite實現中的一些限制,所以我試圖簡化查詢。但它仍然沒有刪除任何東西。
然後,我把它改成一個選擇查詢(只是替換SELECT * DELETE)和工作。所以可能這不是連接或子查詢畢竟是罪魁禍首。
爲了測試選擇查詢我又增加了一個moveToFirst()
返回的光標:
mDb.rawQuery(deleteSql, null).moveToFirst();
當我後來又變回刪除查詢,我忘了刪除moveToFirst()
,然後成功了!
真的很高興,現在的工作,但我很困惑,爲什麼有必要來移動光標,以實際刪除任何東西。這是設計還是錯誤?
我剛剛殺了4小時對這個愚蠢的一個**的問題,他們應該有這樣的文件中明確提出,時間真是浪費。 – LuckyMe
我喜歡你的問題如何包含我的刪除問題的答案,非常有效! – Noumenon
感謝您的發現。這應該一定要記錄!我認爲不應該是這樣,但至少現在起作用。 – kgrevehagen