2014-10-02 58 views
0

我有一个数据库表叫细节,这里有三个感兴趣的栏目对我说:UNIQUE INDEX上的查询在遇到重复时返回什么?

| _id | Name | DOB | ......| .....

我在上面创建唯一索引 - 我想没有两行具有相同的名称和生日:

CREATE UNIQUE INDEX _id ON Details (Name, BirthDate); 

现在我的问题的情况如下: 我从一个文件中读取 - 内部for循环 - 因为我插入一条记录到上表文件中的每一行,如果我的插入查询发现重复,它返回什么?我想停止for循环的迭代以在我找到重复并在下一次迭代时开始之后跳过插入语句。我如何检测这个?

以下是我的插入语句:

public void insert(String birthDate, String name, String daysOld, String hoursOld, String uRi, String minutesOld, String months, String seconds, String timestamP, String weeks, String years, String isAdhoc){ 
     // InsertHelper ih = new InsertHelper(db, "columnTable"); 

     String INUP= "INSERT OR REPLACE INTO Details (BirthDate, Name, isAdhoc, daysOld, hoursOld, imageUri, minutesOld, monthsOld, secondsOld, timestamp, weeksOld, yearsOld) " + 
       "values ("+"'"+birthDate+"'"+","+"'"+name+"'"+","+"'"+isAdhoc+"'"+","+"'"+daysOld+"'"+","+"'"+ hoursOld+"'"+","+"'"+ uRi+"'"+","+"'"+minutesOld+"'"+","+"'"+ months+"'"+","+"'"+ seconds+"'"+","+"'"+timestamP+"'"+","+"'"+weeks+"'"+","+"'"+years+"'"+");"; 
     mDb.execSQL(INUP); 
    } 
+0

向我们展示您的java代码。当你执行一个SQL命令时,你应该检查返回的值。 – 2014-10-02 09:18:26

+0

谢谢,我想要检查我的Java代码的哪一部分?插入语句?代码太大,我可以重现相关的片段。 – User3 2014-10-02 09:20:38

+0

插入语句可能就足够了。 – 2014-10-02 09:23:03

回答

1

您正在使用INSERT OR REPLACE。重复条目将替换现有条目,因此不会有重复项存在,也不会发生错误。

如果您不希望现有条目被替换,您可以只使用INSERTINSERT OR IGNORE

execSQL参考文献强烈鼓励 - 由于许多原因,这是一个很好的做法 - 使用insert代替。

+0

如果我不想插入,如果找到具有相同名称和出生日期的记录,该怎么办?我应该将INSERT OR REPLACE更改为INSERT吗?另外如果我这样做,我会遇到重复什么样的返回类型,我应该检查?我想跳过循环的迭代,并开始下一次迭代。 – User3 2014-10-02 09:30:31

+0

是的!这是Android的java,对吧? – 2014-10-02 09:50:36

+0

是的,我改变它插入和工作完美:) – User3 2014-10-02 13:08:05