3

我有一个包含这些对象的列表:

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

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

我的数据库中有一个具有相同名称和相同属性的表。

这个列表有大约 1000 个对象。第一次处理此列表时,所有对象都将存储在数据库中。

下一次,List 的一些对象会改变或者一些新的对象也会添加它。这是问题所在。

如何更新新对象并将其添加到数据库以避免将数据库中的所有存储对象加载到其他列表中,然后比较两个列表?

它是否存在某种方式可以最大限度地减少对数据库的访问?(我不想每次加载 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。如果您可以控制 tabledefinition,则可以在 create 语句中查看具有唯一约束的ON CONFLICT [REPLACE|IGNORE] 子句。这样,您应该能够插入您的列表并让 do 数据库工作。

最好的问候,山姆

于 2013-09-22T09:51:25.143 回答