Android SQLite递增列值

dav*_*ain 7 sqlite android

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

下面是最初设置的分数(这个工程),即得到的分数(也能正常工作),并更新得分的方法,增加了有关球员得分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();

    }
Run Code Online (Sandbox Code Playgroud)

laa*_*lto 9

int playerScoreInc = playerScore ++;
Run Code Online (Sandbox Code Playgroud)

这种分配playerScoreplayerScoreInc只有一个递增后playerScore.首先递增然后分配,改为++playerScore.

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

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


Sur*_*gch 5

其他答案解决了原始问题,但语法使其难以理解.对于未来的观众来说,这是一个更普遍的答案.

如何增加SQLite列值

SQLite的

一般的SQLite语法是

UPDATE {Table} SET {Column} = {Column} + {Value} WHERE {Condition}
Run Code Online (Sandbox Code Playgroud)

这方面的一个例子是

UPDATE Products SET Price = Price + 1 WHERE ProductID = 50
Run Code Online (Sandbox Code Playgroud)

(这个答案的功劳)

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();
Run Code Online (Sandbox Code Playgroud)

去做

这个答案应该更新为使用update而不是execSQL.见下面的评论.


小智 3

改变

int playerScoreInc = playerScore ++;
Run Code Online (Sandbox Code Playgroud)

int playerScoreInc = ++ playerScore;
Run Code Online (Sandbox Code Playgroud)