我正在尝试创建一个分数数据库,当他们通过调用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 …Run Code Online (Sandbox Code Playgroud) 我需要检索与列表中存储的ID匹配的记录.在运行时生成的查询很简单:
SELECT [whatever FROM sometable] WHERE (id = 1) or (id = 5) or (id = 33).
Run Code Online (Sandbox Code Playgroud)
这相当于
SELECT [whatever FROM sometable] WHERE [id] IN (1, 5, 33);
Run Code Online (Sandbox Code Playgroud)
这很好,但如果列表包含数百或数千个ID怎么办?声明将是巨大的,并且在某些时候SQL解析器可能会呱呱叫,或者如果它没有,性能可能会非常糟糕.如何以对检索的记录数量不那么敏感的方式执行此操作?
(我不能只循环遍历列表并逐个检索记录的原因是我需要数据库为我做ORDER BY.记录必须来自特定字段排序的数据库,而列表表示由网格中的用户可以通过多种方式进行排序.是的,我可以在检索后对代码中的记录进行排序,但这是计划B,因为我甚至不需要将它们全部保存在一个数据结构中,只是为了正确订购.)