2013-02-05 31 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是为了降序,但如何玩家的名字。在你建议的代码中出现错误 –

相关问题