【问题标题】:What does a query on UNIQUE INDEX return when it encounters a duplicate?UNIQUE INDEX 上的查询遇到重复项时会返回什么?
【发布时间】:2014-10-02 09:08:56
【问题描述】:

我有一个名为 Details 的数据库表,这里有我感兴趣的三列:

| _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);
    }

【问题讨论】:

  • 向我们展示您的 java 代码。执行 SQL 命令时,应检查返回值。
  • 谢谢,您要检查我的 java 代码的哪一部分?插入语句?代码太大了,但是我可以重现相关的sn-ps。
  • 插入语句可能就够了。
  • 我已经更新了以上内容,请刷新:)

标签: android sqlite unique-index


【解决方案1】:

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

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

execSQL 参考强烈鼓励使用 insert 代替 - 并且出于多种原因这是一个很好的做法。

【讨论】:

  • 如果我发现一个名字和出生日期相同的记录,我不想插入怎么办?我应该将 INSERT OR REPLACE 更改为仅 INSERT 吗?另外,如果我这样做并且遇到重复的返回类型,我应该检查什么?我想跳过循环的迭代并从下一次迭代开始。
猜你喜欢
  • 2016-03-25
  • 2016-05-08
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多