¿Cómo resuelve la biblioteca de SQLite de Android conflictos si inserto filas duplicadas? Estoy construyendo mi aplicación para el nivel de API 7, que por desgracia no tiene el método SQLiteDatabase.insertOnConflict()
que se incluyó a partir del nivel de API 8.Resolución de conflictos en SQLiteDatabase de Android
Respuesta
puede especificar un índice de UNIQUE en la definición de tabla que permiten que las filas sean REPLACE D:
CREATE TABLE mytable (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
UNIQUE (id) ON CONFLICT REPLACE
)
Si una fila un INSERT o UPDATE intenta añadir una fila con un ID que ya existe, la fila existente se sustituye por uno nuevo.
De manera predeterminada, si tiene una excepción de índice única, se lanzará una inserción de índice duplicado. solución común es comprobar la existencia registro antes de ejecutar inserción - pseudo-código:
select * from people where name = 'Smith';
//if resultset is empty then perform insert
insert into people values 'Smith'
Hay una cláusula en ON CONFLICT
SQLite que se puede decir INSERT INTO ... ON CONFLICT...
.
Lea la documentación por favor. http://www.sqlite.org/lang_conflict.html
De hecho, utilice esto si no siempre quiere reemplazar en conflicto. –
¿Funciona esto en varias instrucciones de inserción? – kaz
- 1. Resolución de conflictos de Couchdb
- 2. Resolución de conflictos de subclipse
- 3. Combina la resolución de conflictos
- 4. consulta de Android SQLiteDatabase con LIKE
- 5. Límite de tamaño de cursor en Android SQLiteDatabase
- 6. Combinar la resolución de conflictos sobre nuevo código
- 7. SVN. Vuelva a intentar la resolución interactiva de conflictos
- 8. ¿Cómo configurar la resolución de conflictos svn con meld?
- 9. conflictos Resolución de primavera con @Autowired y @Qualifier
- 10. Resolución de pantalla de Android
- 11. independencia Resolución en Android SurfaceView
- 12. Android Camera Set Resolución
- 13. Diseñando para Android - ¿Resolución?
- 14. Programación de Android: resolución de pantalla
- 15. Procesamiento de imágenes de alta resolución Android
- 16. ¿Qué hace cada acción de resolución automática de conflictos de SVN?
- 17. SQLiteDatabase multi-hilo patrón de bloqueo
- 18. Cómo actualizar la resolución de conflictos al actualizar de SQL-Server 2005 a SQL-Server 2008
- 19. Resolución de conflictos con Emacs Ediff: ¿Cómo puedo tomar los cambios de ambas versiones
- 20. Resolución de pantalla mínima para dispositivos Android
- 21. SQLiteDatabase - Cómo usar where clause?
- 22. Android: Altura de diseño en porcentaje de resolución de pantalla
- 23. Intento de la cámara con parámetros de resolución en Android
- 24. ¿Cómo resuelvo conflictos en TFS?
- 25. ¿Es posible obtener la resolución de un video en Android?
- 26. Solo dispositivos de alta resolución (píxeles) en Android Market
- 27. Resolución de pantalla completa en Android para juegos libgdx
- 28. Tratamiento de conflictos causados por la replicación en BigCouch
- 29. Gestionar conflictos de CSS
- 30. conflictos dependencia de Maven
+1 Potencialmente peligroso, pero también útil función No he oído hablar de befor. – piotrpo
De hecho, debe tener cuidado y asegurarse de que sea el resultado deseado en todos los casos. Funciona muy bien para cosas como la sincronización de una base de datos local con datos remotos. –
Gracias. Esto funcionará por ahora. Pero, según tengo entendido, si creo una tabla con esta declaración, se reemplazará cada vez que haya un conflicto. Pero, ¿qué ocurre si no quiero utilizar este tipo de resolución de conflictos cada vez que hago una inserción? – kibibyte