私はハイスコアデータベースにsugar ormを使用しています。多くの検索の後(ドキュメントが非常に純粋で、リンクが死んでいるため)、データベースからレコードを保存して一覧表示することができました。残念ながら、重複したスコア レコードを削除する方法や、名前とハイ スコアの値が同じ場合に新しいレコードを保存する代わりにレコードを更新する方法がわかりません。これは次のような方法で実行できることがわかりました。
getWritableDatabase().execSQL("delete from highscores where _id not in (SELECT MIN(_id ) FROM highscores GROUP BY highscores_id)");
}
しかし、idフィールドやその名前があるかどうかさえわからないシュガーオームでどうすればそれを行うことができますか?
更新: @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 を作成し (コードも更新)、そのリストを使用して合計が存在するかどうかを確認しました。これで問題なく動作し、二重のレコードは作成されないようです。