2014-10-02 2 views
0

У меня есть таблица базы данных называется Подробности, есть три колонки, представляющие интерес для меня здесь:Что возвращает запрос UNIQUE INDEX, когда он встречает дубликат?

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

создать уникальный индекс выше - я не хочу ни одного из двух строк с тем же именем и Дата рождения:

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

Теперь мой сценарий проблема заключается в следующем: я чтение из файла - внутри для цикла - для каждой строки в файле Я вставив запись в таблице выше, если моя вставка запрос находит дубликат , что он возвращается? Я хочу остановить итерацию цикла 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, вы должны проверить возвращаемое значение. –

+0

Спасибо, какая часть моего кода Java вы хотите проверить? Вставные заявления? Код слишком велик, но я могу воспроизвести связанные фрагменты. – User3

+0

Вставка заявления может быть достаточно. –

ответ

1

Вы используете INSERT OR REPLACE. Дублирующие записи заменяют существующие, поэтому дубликатов не будет, и ошибка не будет.

Вы можете использовать только INSERT или INSERT OR IGNORE, если вы не хотите, чтобы существующие записи были заменены.

execSQL ссылка настоятельно рекомендует - и это хорошая практика по многим причинам - вместо этого использовать insert.

+0

Что делать, если я не хочу вставлять, если найду запись с тем же именем и датой рождения? Должен ли я изменить INSERT или REPLACE на просто INSERT? Также, если я это сделаю, и я столкнулся с дубликатом, какой тип возврата должен проверить? Я хочу пропустить итерацию цикла и начать с следующей итерации. – User3

+0

Да! Это java для андроида, не так ли? –

+0

Да, я изменил его, чтобы вставить и работает безупречно :) – User3