3

このオブジェクトのリストがあります:

public class Foo {
    public String title;
    public String subject;
}

例えば:List<Foo> mFoo = new ArrayList<Foo>();

そして、データベースに同じ名前と同じ属性を持つテーブルがあります。

このリストには約 1000 個のオブジェクトがあります。このリストが初めて処理されるとき、すべてのオブジェクトがデータベースに保存されます。

次回は、リストのいくつかのオブジェクトが変更されるか、いくつかの新しいオブジェクトも追加されます。これが問題です。

データベースに保存されているすべてのオブジェクトを他のリストにロードしないように更新して新しいオブジェクトをデータベースに追加し、両方のリストを比較するにはどうすればよいですか?

データベースへのアクセスを最小限に抑える方法はありますか? (毎回1000個のオブジェクトをロードしたくない)

編集1:情報の拡大

List<Foo> mFoo外部ソース データ (html コード) を解析するメソッドからを取得します。次に、オブジェクトを Foo としてデータベースに保存します。

オブジェクトを保存すると、ID が取得されます。

public class Foo {
    private String id; 
    public String title;
    public String subject;
}

メソッドを実行するたびに、データベースに既に存在するオブジェクト Foo を含む可能性のあるリストを取得しますが、それらは新しいインスタンスであるため、その ID はありません。

4

1 に答える 1

1

インスタンスをダーティとしてマークするためのフラグをいくつか提案します。

public class Foo {
  private String title;
  private String subject;
  private boolean isDirty=true;


  public void onPersist(){
    this.isDirty=false;
  }

  public String setTitle(String title){
    this.isDirty=true;
    this.title=title;
  }

  //more setters und getters

}

編集 1

d'alar'cop が指摘したように、タイトルや件名​​に対してデータベースにクエリを実行するしかないようです。

しかし、タグによると、sqlite を使用しています。 テーブル定義を制御できる場合は、作成ステートメントで一意の制約を持つON CONFLICT [REPLACE|IGNORE]句を調べることができます。そうすれば、リストを挿入して、データベースにその仕事を任せることができるはずです。

よろしく、サム

于 2013-09-22T09:51:25.143 に答える