我将sugar orm用于高分数据库,经过大量搜索(因为文档非常纯粹,而且有些链接已经失效),我设法保存并列出了数据库中的记录。不幸的是,我不知道如何删除重复的分数记录,或者如何更新记录而不是保存新记录,以防名称和高分值相同。我发现这可以通过以下方式完成:
getWritableDatabase().execSQL("delete from highscores where _id not in (SELECT MIN(_id ) FROM highscores GROUP BY highscores_id)");
}
但是我怎么能用我不知道它是否有一个 id 字段或它的名字的糖 orm 呢?
更新: 按照@Juancortes 的建议,我正在尝试检查当前玩家,如果当前分数存在于数据库中,则在添加记录之前:
private void saveScore(){
int total;
total=checkList();
if(total>0) {
HighScoresDB highScores = new HighScoresDB(tvPlName.getText().toString(), total);
highScores.save();
}
}
private int checkList(){
String tempName=tvPlName.getText().toString();
List<HighScoresDB> check = HighScoresDB.find(HighScoresDB.class, "person = ?",tempName);
ArrayList<Integer> templist = new ArrayList<Integer>();
for(int i=0;i<check.size();i++){
templist.add(check.get(i).score);
}
int total = Integer.valueOf(totalPts.getText().toString());
if(templist.contains(total)) {
total = 0;
}else{
total=Integer.valueOf(totalPts.getText().toString());
}
return total;
}
我得到了一个列表,其中包含当前使用 Sugar orm 的玩家的现有记录。在我检查列表是否包含当前分值后,如果为真,我将其设置为“0”。然后在“saveScore()”方法中,仅当分值大于“0”时才保存记录。但这不起作用,我不断获得双倍、三倍等记录。我做错了什么?
更新2: 似乎“包含”不适用于直接包含数据库对象的列表。所以我创建了一个只有分数的 ArrayList(代码也更新了),我使用该列表来检查总数是否存在。现在似乎工作正常并且不会创建双重记录。