2016-05-12 42 views
0

我有我的排行榜数据库。目前,我将所有分数插入我的排行榜,并选择5个最高分数显示在我的应用程序。我认为这会占用太多的空间,以至于不能删除其他分数,所以我想删除它们。我怎样才能做到这一点?删除所有不在特定行中的SQLite行

以下是我选择的前5分,排在第一位的分数和第二的时间,如果分数等于:

public Cursor gethmLeaderboard(SQLiteDatabase db){ 

    String[] columns = {TableInfo.LB_RANK, TableInfo.LB_SCORE, TableInfo.LB_TIME}; 

    Cursor c = db.query(TableInfo.TABLE_HM, null, null, null, null, null, TableInfo.LB_SCORE + " DESC, " + TableInfo.LB_TIME + " ASC", "5"); 
    return c; 

} 

以下是我创造我的表:

public String CREATE_HMQUERY = "CREATE TABLE " + TableInfo.TABLE_HM + "(" 
     + TableInfo.LB_RANK + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 ," + TableInfo.LB_SCORE + 
     " INT,"+ TableInfo.LB_TIME + " VARCHAR);"; 

我想删除不在该查询中的所有行。我怎样才能做到这一点?

我已经试过:

public String DEL_ALLBUTES = "DELETE FROM " + 
     TableInfo.TABLE_HM + " WHERE " + 
     TableInfo.LB_RANK + " NOT IN (SELECT " + 
     TableInfo.LB_RANK + " FROM " + 
     TableInfo.TABLE_HM + " ORDER BY " + 
     TableInfo.LB_SCORE + " DESC, " + 
     TableInfo.LB_TIME + " ASC LIMIT 5);"; 

在这种格式:

db.rawQuery(DEL_ALLBUTES, null); 

但是,当我检查数据库仍有吨行,以便它不工作。

回答

1

使用execSQL()对于命令(所有不是SELECT的东西)。
rawQuery()对于查询(选择)。 OK!

+0

OK!我得到了不同的结果。现在我在我的execSQL()语句中得到一个运行时错误 – Milap

+0

看起来db似乎是空的......但我不能说,因为我看不到该命令附近的上下文。 –

+1

我从exec语句中删除了null,并且它不是db.execSQL(DEL_ROWHM5);它的工作原理。 – Milap