Android SQLite递增列值

时间:2014-02-26 09:35:31

标签: android sqlite

我正在尝试创建一个分数数据库,当他们通过调用updateScore()获胜时,将玩家的分数增加1。主键和玩家编号相同(我可能需要在某个时刻重新构建数据库),最后一列是“得分”。

下面是最初设置得分的代码(这个有效),获得得分的方法(也可以正常工作)和更新得分的方法,将相关的玩家得分增加1.这是不成功的部分不行,有什么我应该做的不同吗?谢谢。

     /** Add a record to the database of two player scores
     * @param playerId
     * @param playerScore
     **/
    public void addScore (int playerId, int playerScore) {

        SQLiteDatabase database = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(ID, playerId);
        values.put(PLAYERNUM, playerId);
        values.put(SCORE, playerScore);

        database.insert(TABLE_2PSCORES, null, values);

        database.close();

    }


    // Get the score 
    public int getScore (int playerId) { 
        SQLiteDatabase database = this.getReadableDatabase();

        Cursor cursor = database.query(TABLE_2PSCORES, COLUMNS, " player = ?", new String[] {String.valueOf(playerId) }, null, null, null, null); //null = groupby, having, orderby, limit

        if (cursor !=null) { cursor.moveToFirst(); }

        int output = cursor.getInt(2);

        return output;
    }


    // Increment score by 1
    public void updateScore (int playerId) {

        SQLiteDatabase database = this.getWritableDatabase();

        int playerScore = getScore(playerId);
        int playerScoreInc = playerScore ++;

        ContentValues values = new ContentValues();
        values.put("score", playerScoreInc);

        database.update(TABLE_2PSCORES, values, PLAYERNUM+" = ?", new String[] {String.valueOf(playerId)} );

        database.close();

    }

5 个答案:

答案 0 :(得分:9)

int playerScoreInc = playerScore ++;

这会将playerScore分配给playerScoreInc,并且仅在此增量playerScore之后。要先增加然后再分配,请更改为++playerScore

但是,您可以在SQL中完成所有操作,无需获取分数,在代码中增加分数,然后单独更新数据库表:

database.execSQL("UPDATE " + TABLE_2PSCORES + " SET " + SCORE + "=" + SCORE + "+1" + " WHERE " + PLAYERNUM + "=?",
    new String[] { String.valueOf(playerId) } );

答案 1 :(得分:5)

其他答案解决了原始问题,但语法使其难以理解。这是未来观众的一般答案。

如何增加SQLite列值

<强> SQLite的

一般的SQLite语法是

UPDATE {Table} SET {Column} = {Column} + {Value} WHERE {Condition}

这方面的一个例子是

UPDATE Products SET Price = Price + 1 WHERE ProductID = 50

(致this answer

<强>的Android

现在一般语法很清楚,让我把它翻译成Android语法。

private static final String PRODUCTS_TABLE = "Products";
private static final String ID = "ProductID";
private static final String PRICE = "Price";

String valueToIncrementBy = "1";
String productId = "50";
String[] bindingArgs = new String[]{ valueToIncrementBy, productId };

SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("UPDATE " + PRODUCTS_TABLE +
        " SET " + PRICE + " = " + PRICE + " + ?" +
        " WHERE " + ID + " = ?",
        bindingArgs);
db.close();

<强> TODO

此答案应更新为使用update而不是execSQL。见下面的评论。

答案 2 :(得分:3)

更改

int playerScoreInc = playerScore ++;

int playerScoreInc = ++ playerScore;

答案 3 :(得分:2)

我认为这会起作用

 // Increment score by 1
    public void updateScore (int playerId) {

        SQLiteDatabase database = this.getWritableDatabase();

        int playerScore = getScore(playerId);
        int playerScoreInc = ++ playerScore;

        ContentValues values = new ContentValues();
        values.put("score", playerScoreInc);

        database.update(TABLE_2PSCORES, values, PLAYERNUM+" = ?", new String[] {String.valueOf(playerId)} );

        database.close();

    }

答案 4 :(得分:0)

你试过调试吗?尝试调试此行:

int playerScoreInc = playerScore ++;

playerScoreInc不会增加。

相关问题