我一直在挣扎了几个小时试图调试为什么下面的删除查询居然没有删除任何东西,即使完全相同的数据库上完全相同的查询在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