2016-05-12 6 views
0

私は自分のリーダーボードのデータベースを持っています。現在、すべてのスコアをリーダーボードに挿入し、5つの最高スコアを選択してアプリに表示します。他のスコアを決して削除しないと余裕がないと思うので、削除したいと思います。これどうやってするの?ここで特定の行にないSQLite行をすべて削除します

は私がトップ5のスコアを選択する方法です、スコアで第一位と第二の時間でスコアが等しい場合:

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 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; 

} 

は私が私のテーブルを作成する方法を説明しますそのクエリにないすべての行を削除します。どうやってやるの?

db.rawQuery(DEL_ALLBUTES, null); 

をしかし、私は、データベースをチェックするとき、それは動作しませんので、行のトンが残っている。この形式で

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);"; 

を:私が試した何

答えて

1

execSQL()のコマンド(SELECTではないものすべて)に使用してください。
rawQuery()クエリ(SELECT)です。

+0

OK!私は別の結果を得た。今私はexecSQL()ステートメントでランタイムエラーが発生します – Milap

+0

dbがnullのようですが...私はそのコマンドの近くにコンテキストがないので、わかりません。 –

+1

私はexec文からnullを取り出し、それはdb.execSQL(DEL_ROWHM5)ではありません。それは動作します。 – Milap

関連する問題