我正在尝试创建一个分数数据库,当他们通过调用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();
}
答案 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语法是
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 强>
答案 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不会增加。