SQLite "INSERT OR REPLACE INTO" не работает

Мне нужно написать запрос в sqlite, чтобы обновить запись, если она существует, или вставить ее, если запись еще не существует. Я посмотрел синтаксис INSERT OR REPLACE INTO из here. Но в моем случае, когда я выполняю запрос ниже много раз, запись дублируется. i.e Если я выполню запрос 5 раз, запись будет вставлена ​​5 раз.

INSERT OR REPLACE INTO NICKS 
    (id_nick,name_nick,date_creation)
 VALUES 
    ('nabeelarif', 'Muhammad Nabeel','2012-03-04')

Вы знаете, что я делаю неправильно. Я работаю на платформе Android и использую Firefox Sqlite Manager для проверки моего запроса.

Ответ 1

Вам нужно иметь уникальный индекс для одной или нескольких комбинаций этих столбцов.

CREATE UNIQUE INDEX idx_something ON NICKS (id_nick, name_nick, date_creation);

Ответ 2

В Android вы должны использовать SQLiteDatabase.replace(), который вставляет или обновляет. С реализацией Android SQLite вы обычно не используете необработанные запросы, представленные как строки. См. http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#replace%28java.lang.String,%20java.lang.String,%20android.content.ContentValues%29

Ответ 3

У вас есть первичный ключ или уникальный индекс, определенный для вашей таблицы? Я считаю, что атрибуты, составляющие первичный ключ или уникальный индекс, используются для определения того, существует ли строка или нет.

Ответ 4

Я обычно использую этот код для этого:

Cursor cur = mDatabase.rawQuery("select * from NICKS where id_nick='"+id_nick+"');
cur.moveToFirst();
if(cur.getCount()>0){
     update...
}else{
     insert...
}