我正在尝试创建一个分数数据库,当他们通过调用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)
int playerScoreInc = playerScore ++;
Run Code Online (Sandbox Code Playgroud)
这种分配playerScore到playerScoreInc只有一个递增后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)
其他答案解决了原始问题,但语法使其难以理解.对于未来的观众来说,这是一个更普遍的答案.
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)
| 归档时间: |
|
| 查看次数: |
8953 次 |
| 最近记录: |