2012-03-05 26 views
10

Tengo que escribir una consulta en sqlite para actualizar el registro si existe o insertarlo si el registro aún no existe. He buscado la sintaxis de INSERT OR REPLACE INTO desde here. Pero en mi caso, cuando ejecuto la consulta de abajo muchas veces, el registro se duplica. es decir, si ejecuto la consulta 5 veces, el registro se inserta 5 veces.SQLite "INSERT O REPLACE INTO" no funciona

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

Tienes alguna idea de lo que estoy haciendo mal. Estoy trabajando en la plataforma Android y usando 'Firefox Sqlite Manager' para probar mi consulta.

Respuesta

25

Necesita tener un índice único en una o en una combinación de esas columnas.

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

+0

Gracias. Creé Unique Index en 'id_nick' y funcionó. –

+0

También creé uno pero parece que no funciona, ¿me puede dar más información? – Skynet

3

¿Tiene una clave principal o un índice único definido por su mesa? Creo que los atributos que componen la clave principal o un índice único se utilizan para determinar si una fila ya existe o no.

6

En Android, debe usar SQLiteDatabase.replace(), que se inserta o actualiza. Con la implementación de Android SQLite, normalmente no utiliza consultas crudas representadas como cadenas. Ver http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#replace%28java.lang.String,%20java.lang.String,%20android.content.ContentValues%29

+0

genial, ayuda mucho gracias! +1 – Dori

+0

¡Me alegro de que haya sido útil! – Macondo2Seattle

-2

normalmente utilizo este código para que:

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