2013-02-05 29 views
-1

嗨,大家好我即將創建遊戲和即時通訊新的sql lite。我有一個代碼插入數據庫,但我不知道如何最大限度地在10,也不知道如何比較新分數的球員和舊分數。如果新的得分擊敗前10名得分中的1名,我該如何刪除前10名中最低的得分。即時尋找偉大的代碼和良好的解釋,以便我會理解代碼的流程。數據庫最多10個,並根據分數排序,並刪除替換分數,如果它是最低

我的繼承人數據庫類:

 public class highscore { 

private static final String DATABASE_NAME = "topscoredb"; 
private static final String DATABASE_TABLE = "tablescore"; 
private static final int DATABASE_VERSION = 2; 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_SCORE = "score"; 
public static final String KEY_NAME = "players_name"; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 


private static class DbHelper extends SQLiteOpenHelper{ 



     public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
        KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_NAME + " TEXT NOT NULL, " + 
        KEY_SCORE + " TEXT NOT NULL);" 

       ); 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, 
       int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXIST" + DATABASE_TABLE); 
      onCreate(db); 

     } 
} 



    public highscore(Context c){ 
    ourContext = c; 
    } 

public highscore open() throws SQLException{ 
ourHelper = new DbHelper(ourContext); 
ourDatabase = ourHelper.getWritableDatabase(); 


    return this; 

} 

    public void close(){ 
    ourHelper.close(); 

    } 



    public long createEntry(String name, String tscore) { 
// TODO Auto-generated method stub 

    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, name); 
    cv.put(KEY_SCORE, tscore); 
return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public String getData() { 
String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_SCORE}; 
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,null, null); 
String result = ""; 

int irow = c.getColumnIndex(KEY_ROWID); 
int iname = c.getColumnIndex(KEY_NAME); 
int iscore = c.getColumnIndex(KEY_SCORE); 

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
    result = result + c.getString(irow)+ " " +c.getString(iname)+" "+ 
c.getString(iscore) + "\n"; 
    } 

return result; 
    } 

    } 

我應該使用方法?

+0

類似的答案已經在stackoverflow.http://stackoverflow.com/questions/2035670/limit-an-sqlite-tables-maximum-number-行之間?rq = 1 –

+0

在某種程度上相似,但它是不同的編碼在android –

回答

-1

,我們可以存儲所有的分數數據庫和撇了撇查詢獲得前十名最高分......

SELECT * FROM(選擇EMPNO,SAL,秩()以上(按SAL倒序)作爲rnk from emp,其中rnk < = 5);

+0

你可以進一步解釋給我。張貼一些例子。 –

+0

簡單的事情,我們只有一張桌子......插入每一個東西都意味着所有的分數,但顯示的時間只有十個最好的記錄。 – sri

+0

這在SQLite中不起作用。 –

1

好吧android使用sqlite,你可以使用Limit an sqlite Table's Maximum Number of Rows中的解決方案。

你也可以得到結果降序排列

ourDatabase.query(DATABASE_TABLE, columns, null, null, null,null,KEYSCORE + " DESC"); 

,並顯示前10個結果。

或使用SQlite查詢構建器方法來限制結果 http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#query(android.database.sqlite.SQLiteDatabase,java.lang.String [],java.lang.String,java.lang.String [],java.lang.String,java.lang.String ,java.lang.String,java.lang.String)

+0

謝謝,我會嘗試 –

+0

ourDatabase.query(DATABASE_TABLE,columns,null,null,null,null,KEYSCORE +「DESC」);這是用於沒有數據的數據庫嗎?這是史詩般的失敗,我的代碼..我知道desc是爲了降序,但如何玩家的名字。在你建議的代碼中出現錯誤 –

相關問題