0

我是一个 sqlite 新手。我正在尝试做什么...我有一个游戏,游戏结束后它将时间结果存储在一个名为 elapsedSeconds 的双变量中。我想将该结果放在一个数据库中,然后在我的专用活动中显示用户的前 10 名。我有创建数据库的 HighScoreDb 类(我使用了一些我在网上找到的代码,但我认为它会达到我的目的)。这是代码。

public class HighScoreDb {
    private static class HighScoreDbHelper extends SQLiteOpenHelper {

    public HighScoreDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        try {
        db.execSQL(SCORE_TABLE_CREATE);
        } catch (SQLException e) {
        Log.i("Error", "Error making database");
        e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + SCORE_TABLE_NAME);
        onCreate(db);
    }

    }

    private static final int DATABASE_VERSION = 2;
    private static final String SCORE_TABLE_NAME = "highscore";
    private static final String SCORE_TABLE_CREATE = "CREATE TABLE "
                             + SCORE_TABLE_NAME
                             + " (_id INTEGER PRIMARY KEY autoincrement, "
                             + "name TEXT NOT NULL, score DOUBLE  NOT NULL)";
    private static final String DATABASE_NAME = "highscores.db";
    // The index (key) column name for use in where clauses.
    public static final String KEY_ID = "_id";

    // The name and column index of each column in your database.
    public static final String KEY_NAME = "name";
    public static final String KEY_SCORE = "score";
    public static final int NAME_COLUMN = 1;
    public static final int NUMBER_COLUMN = 2;
    public static final int SCORE_COLUMN = 3;

    SQLiteDatabase db;
    private final Context ctx;
    private final HighScoreDbHelper dbHelper;

    public HighScoreDb(Context context) {
    this.ctx = context;
    ctx.deleteDatabase(SCORE_TABLE_NAME);
    dbHelper = new HighScoreDbHelper(context);
    db = dbHelper.getWritableDatabase();
    }

    public void close() {
    if (db != null) {
        db.close();
    }

    }

    public void createRow(String name, int score) {
    ContentValues intialValue = new ContentValues();
    intialValue.put("name", name);
    intialValue.put("score", score);
    db.insertOrThrow(SCORE_TABLE_NAME, null, intialValue);

    }

    public void deleteRow(long rowId) {
    db.delete(SCORE_TABLE_NAME, "_id=" + rowId, null);
    }

    public Cursor GetAllRows() {
    try {
        return db.query(SCORE_TABLE_NAME, new String[] { "_id", "name", "score" }, null,
                null, null, null, "score DESC");
    } catch (SQLException e) {
        Log.i("Error on query", e.toString());
        return null;
    }

    }

    public void updateRow(long _id, String name, String score) {
    ContentValues args = new ContentValues();
    args.put("name", name);
    args.put("number", score);
    db.update(SCORE_TABLE_NAME, args, "_id=" + _id, null);
    }

}

从这个表中我不需要列名,因为我只有 10 个有分数的地方。我的游戏结束后如何将该结果插入到这个数据库中?我想我知道如何从中阅读,我会做这样的事情:

HighScoreDb db = new HighScoreDb(this);
Cursor myCursor = db.GetAllRows();
myCursor.moveToPosition(0);
    String Row1Value2 = myCursor.getString(2);
myCursor.close();
db.close();

我在我的游戏课上这样称呼它:

HighScoreDb db = new HighScoreDb(this);
4

2 回答 2

0

我不确定我是否理解您的问题...要将一些数据放入您的数据库中,您只需正确使用下面编写的函数(我假设您的课程工作正常),例如:

HighScoreDbHelper myDbHelper = new HighScoreDbHelper(yourContext);
myDbHelper.createRow(yourName, yourScore);

本教程是 sqlite 概念的良好入门:http ://www.vogella.com/articles/AndroidSQLite/article.html

于 2013-03-07T14:28:30.647 回答
0

您打开数据库的方式很好。

与其使用游标来获取有关行的特定信息,不如在表中创建一个表示行的实体。使用来自光标的信息创建这些对象的列表。

public UserScore {
    String name;
    Integer score; // don't know why you would use double here.

    // getters + setters or make it immutable
}

我将提供的是在 HighScoreDb 中添加新分数的一些方法。例如带有签名

public void addScore(UserScore userScore);

不要考虑只添加 10 个分数,将每个分数添加到数据库中。每当你想要前10名的分数。只需查询降序的最后 10 个分数。否则,您将编写很多复杂性,而这很容易通过查询完成。为此,请查看前 N 个查询。

一个在助手内部写入数据库的例子是这样的,(没有测试 SQL,但它应该是这种形式)

this.getWritableDatabase().execSQL("insert into highscore (name, score) values (" + userScore.getName() + "," + userScore.getScore() + ")");
于 2013-03-07T14:31:41.597 回答