我一直在努力调试为什么以下删除查询实际上没有删除任何内容,即使完全相同的数据库上的完全相同的查询在Firefox的SQLite管理器中工作正常...
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);
Run Code Online (Sandbox Code Playgroud)
由于JOIN和子查询都有点复杂,我的想法围绕Android的sqlite实现中关于子查询的一些限制,所以我尝试简化查询.但它仍然没有删除任何东西.
然后我将其更改为选择查询(刚刚用SELECT*替换DELETE)并且这样做有效.所以可能不是连接或子查询毕竟是罪魁祸首.
为了测试select查询,我moveToFirst()在返回的游标中添加了一个:
mDb.rawQuery(deleteSql, null).moveToFirst();
Run Code Online (Sandbox Code Playgroud)
当我后来再次将其更改回删除查询时,我忘记删除 moveToFirst() 它然后它工作了!
它现在很好用,但我很困惑为什么有必要移动光标以实际删除任何东西.这是设计还是错误?
rawQuery返回结果集的Cursor,它只是对查询结果的引用.你应该只是使用直接的delete()调用.看看文档:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
或SQLiteStatement:
http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
| 归档时间: |
|
| 查看次数: |
10853 次 |
| 最近记录: |