SQLite "Вставить или заменить на" не работает - PullRequest
10 голосов
/ 06 марта 2012

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

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

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

Ответы [ 4 ]

26 голосов
/ 06 марта 2012

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

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

6 голосов
/ 06 марта 2012

В 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 голосов
/ 06 марта 2012

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

0 голосов
/ 24 июля 2015

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

Cursor cur = mDatabase.rawQuery("select * from NICKS where id_nick='"+id_nick+"');
cur.moveToFirst();
if(cur.getCount()>0){
     update...
}else{
     insert...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...