Android sqlite数据库将插入重复的数据

Android sqlite数据库将插入重复的数据,android,sqlite,Android,Sqlite,我从webservice获取了数据,并将它们插入activity onCreate()函数中的数据库。代码如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.contact_per

我从webservice获取了数据,并将它们插入activity onCreate()函数中的数据库。代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.contact_person);

    RunningService runningService = new RunningService();
    runningService.insert(staff);
    initView();
}
public void insertAllStaff(Staff staff){
    ContentValues values = new ContentValues();
    values.put("name", staff.getName());
    Uri uri = contentResolver.insert(CONTENT_URI, values);
}
insert()的代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.contact_person);

    RunningService runningService = new RunningService();
    runningService.insert(staff);
    initView();
}
public void insertAllStaff(Staff staff){
    ContentValues values = new ContentValues();
    values.put("name", staff.getName());
    Uri uri = contentResolver.insert(CONTENT_URI, values);
}
每次我进入这个活动,它都会将数据插入数据库,数据是相同的


是否有一种方法可以让我进入这个活动,并且它不会将相同的数据插入数据库?

如果您不希望表中的值重复,那么您必须为您认为“唯一”的字段定义一个唯一索引


您可以在创建表时执行此操作,也可以使用ALTER SQL语句创建索引。

SQLite支持INSERT NOT EXISTS语法

INSERT INTO MyTable(id,text) 
SELECT 123, 'Helloworld' 
WHERE NOT EXISTS(SELECT 123 FROM MyTable WHERE id = 123');
请使用此语法以提高性能

您的冲突解决程序使用的是哪个内容提供商?您可能需要更改它,并使用使用上述SQL语句的其他内容

检查是否有相同的数据,然后只插入到Itan中,我猜在尝试插入非唯一数据时会引发异常+如果可能,meI的1将建议在不违反唯一约束和引发异常的情况下解决此问题。在我看来,异常不应该经常发生,如果从Web服务检索的数据包含冗余信息,我们应该考虑一个解决方案,如何处理这些信息而不出现异常。@MarkSkayff回答ok,我同意,您应该为您的PK使用唯一的约束。但是,无论你的代码是什么,它都不需要插入两个重复的值。我要问你的唯一问题是,插入是两次?如果是的话,可能你在另一个地方有什么不好的地方必须修复。否则,添加唯一约束将修复该问题。Recards@MaxPinto当我回到这个活动时,它会调用onCreat(),它会再次插入数据,我只需要它第一次将数据插入到这个活动中,我怎么做?@Eric Cheng,在插入新记录之前,你可能需要检查数据库中记录的存在和状态。如果你的应用程序正在进行某种初始化,你应该先读取数据,如果数据存在(或相等),则避免重新插入。好的,我将尝试这种方法