Ответ 1
Вам нужно иметь уникальный индекс для одной или нескольких комбинаций этих столбцов.
CREATE UNIQUE INDEX idx_something ON NICKS (id_nick, name_nick, date_creation);
Мне нужно написать запрос в 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 для проверки моего запроса.
Вам нужно иметь уникальный индекс для одной или нескольких комбинаций этих столбцов.
CREATE UNIQUE INDEX idx_something ON NICKS (id_nick, name_nick, date_creation);
В 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
У вас есть первичный ключ или уникальный индекс, определенный для вашей таблицы? Я считаю, что атрибуты, составляющие первичный ключ или уникальный индекс, используются для определения того, существует ли строка или нет.
Я обычно использую этот код для этого:
Cursor cur = mDatabase.rawQuery("select * from NICKS where id_nick='"+id_nick+"');
cur.moveToFirst();
if(cur.getCount()>0){
update...
}else{
insert...
}