Android SQLite从行号中选择和删除

时间:2012-12-10 08:38:04

标签: android sqlite numbers row

我有一个数据库,我不断地从服务中获取新数据。这是在一个线程中工作,因此每当我看到新数据时,我将ii放入数据库中。我只是在我的应用程序中显示最新鲜的20个新闻,这是完美的。问题是我想从数据库中删除所有最旧的通知,并且只保留最新鲜的20个通知。我不知道如何编写该查询。有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

根据SQLite的文档,您在" DELETE FROM"中同时拥有ORDER BY和LIMIT支持。

http://www.sqlite.org/lang_delete.html

然而,我还没试过这个,所以我不能说它是否适用于android下的SQLite。然而,什么工作(我过去做过)是使用

DELETE FROM tableName 
WHERE myid IN (SELECT id FROM mytable ORDER BY id LIMIT -1 OFFSET 20); 

答案 1 :(得分:2)

我喜欢@ JustDanyul的答案,但在这种情况下我认为你不需要IN条款。看起来他正在使用1个表,所以你不能这样写这个查询吗?

DELETE FROM tableName ORDER BY id DESC LIMIT -1 OFFSET 20; 

答案 2 :(得分:0)

最后我在这里回答我自己的问题:)

我所做的就是:

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,我能够按照我的意图行事。无论如何,谢谢你的帮助。