我有一个数据库,我不断地从服务中获取新数据。这是在一个线程中工作,所以每次我看到新数据时,我都会将ii放在数据库中。我只在我的应用程序中显示最新鲜的20条新闻,而且工作完美。问题是我想要从数据库中删除所有最旧的通知,并且只保留最新的20个通知。我不知道如何编写该查询。任何帮助?Android SQLite从行号选择和删除
回答
那么到底我是来回答我的问题:)
,我所做的事情是这样的:
if(fetchNotificationsCount() > 20){
String sql = "SELECT * FROM (SELECT * FROM " + PPASQLiteHelper.TABLE_NOTIFICATIONS + " ORDER BY " + PPASQLiteHelper.COLUMN_ID + " DESC) LIMIT " + fetchNotificationsCount() + " OFFSET 20";
Cursor cursor = database.rawQuery(sql, null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
database.delete(PPASQLiteHelper.TABLE_NOTIFICATIONS, PPASQLiteHelper.COLUMN_ID + "=" + cursor.getLong(0), null);
cursor.moveToNext();
}
cursor.close();
}
随着LIMIT和OFFSET我能够做什么,我意。无论如何,感谢您的帮助。
您正处于LIMIT和OFFSET的正确轨道,但是您的实施效率非常低,可以在一次删除呼叫中完成。您在这里展示的解决方案首先加载并遍历游标,然后根据需要多次触发“删除”。它可以完成只击中一次数据库:) – JustDanyul
哦,我怎么能在一个电话中做到这一点? – Tooroop
根据SQLite的文档,您在“DELETE FROM”中同时具有ORDER BY和LIMIT支持。
http://www.sqlite.org/lang_delete.html
但是,我没有试过,所以如果它在安卓上SQLite的工作,我不能说。然而,是什么工作(我在过去做到了这一点)是使用
DELETE FROM tableName
WHERE myid IN (SELECT id FROM mytable ORDER BY id LIMIT -1 OFFSET 20);
嗯...是的,我认为这也可能是一个可能的解决方案 – Tooroop
我喜欢@ JustDanyul的答案,但我不认为你需要在这种情况下IN
条款。看起来他正在使用1个表,所以你不能写这样的查询吗?
DELETE FROM tableName ORDER BY id DESC LIMIT -1 OFFSET 20;
- 1. SQLite从选择结果中删除行
- 2. 选择和删除行
- 3. 从Android SQLite光标中删除行
- 4. Android的sqlite删除和插入行
- 5. 在Android SQLite删除行
- 6. 从sqlite中删除值android
- 7. 从android sqlite表中删除
- 8. 删除行选择
- 9. 从表和sqlite数据库删除行
- 10. 从表和sqlite数据库删除行
- 11. 选择和删除行mysqli查询
- 12. 删除listview和sqlite的行
- 13. 删除行号从选项的grep
- 14. 删除引号和行号
- 15. 在android中用SQLite从SQLite删除行listadapter
- 16. Android的SQLite删除
- 17. 删除从选择的行处理
- 18. 删除和恢复从选择
- 19. SQL Server删除或选择和删除
- 20. MySQL选择并删除行
- 21. 从MySQL选择删除列
- 22. Android Java SQLite选择
- 23. Android SQLite null选择
- 24. Android:如何从图库中删除选择行为?
- 25. 如何获取选择行表单listview然后从Sqlite数据库中删除
- 26. 删除从哪里存在(选择...)删除所有行
- 27. JTable选择和删除
- 28. Sqlite行不删除
- 29. 删除SQLITE行UITABLEVIEW
- 30. 从SQLite中删除
行号取决于顺序。您需要一个“插入日期”列并根据您的查询。 (请注意,这与android和sqlite无关,大多数sql引擎会以同样的方式工作) – njzk2
当您更新以订购并删除最后添加时创建一个触发器? – adarsh
订单必须降序。然后我应该选择从20到最后的所有行(通过获得行数来获得最终结果)。但也要注意,20不应该是id,它实际上是表中的行数。我不th我可以根据我的查询日期。 – Tooroop