2016-05-12 41 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