Necesito hacer un tipo de procedimiento INSERT o UPDATE IF EXIST con mi base de datos. Leí que .replace()
era el camino a seguir. Inserta nuevos registros muy bien, pero si el registro ya existe, no parece actualizarlo.Android SQLite: ¿qué hace realmente SQLiteDatabase.replace()?
que tienen algo como esto:
ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);
Si me quedo este código cuando este registro no está en la base de datos, aparece para crear el registro bien, como si lo hiciera un insert()
. Pero si cambio NAME a "john" o algo así, y ejecuto el replace()
nuevamente, no parece actualizar el registro.
De acuerdo con los documentos, aquí se muestra la sintaxis:
public long replace (String table, String nullColumnHack, ContentValues initialValues)
Por qué se llama initalValues
? ¿Significa eso que esos valores solo se usan cuando el registro no existe y se va a insertar? Si es así, ¿cómo usas el método para actualizar un registro? ¿Dónde especificas los nuevos valores?
Si no entiendo bien lo que replace()
hace en conjunto, ¿alguien puede explicar cuál es su propósito?
Lo hace insertar o sustituir. –
Puede utilizar los procedimientos 'INSERT' y' REPLACE' en sus métodos 'ContentProvider.insert()' si pasa un parámetro especial en su 'ContentValues'. Escribí una publicación de blog sobre esto aquí: [SQLite INSERT O REPLACE through ContentProvider | Zumbido de Android] (http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/) – JesperB