SQLite en Android: insertWithOnConflict () devuelve resultados cada vez mayores para los mismos conjuntos de datos
PROBLEMA ANTECEDENTES: Tengo dos tablas donde la clave principal son campos de texto.
Cuando utilizo repetidamente SQLiteDatabase.insertWithOnConflict(myTable, null, myValues, SQLiteDatabase.CONFLICT_REPLACE)
con los mismos datos, veo valores cada vez mayores que se devuelven.
- "AS" equivalente en sqlite
- Cómo reducir la base de datos sqlite?
- Inserción SQLite de Android única
- Consulta Sqlite para la clasificación de fechas
- SQLITE INSERT con ID manual (clave principal)
Por lo tanto, parece que INSERT se está realizando (en lugar de REPLACE) para los mismos conjuntos de datos.
PROBLEMA: Sin embargo, al mirar estas tablas con "SQLite Database Browser" veo el número correcto de registros que esperaría cuando REPLACE se realice.
La raíz de mi confusión es la descripción de la documentación de Android que indica: * Devuelve el ID de fila de la fila recién insertada O la clave primaria de la fila existente si el parámetro de entrada "conflictAlgorithm '= CONFLICT_IGNORE O -1 si hay algún error *
PREGUNTA: ¿Por qué se realiza un REEMPLAZO, pero no se devuelve el ID de fila de los datos existentes?
- Android desventajas de no cerrar el cursor
- ¿Qué es una clase completa de ayuda de base de datos Android para una base de datos SQLite existente?
- Android sqllite idioma turco
- Utilización de la base de datos legible y escrita de SQLite
- ¿Cómo establecer el tipo de datos en SQLiteDatabase vinculación de consulta en bruto?
- ¿Es posible obtener acceso de sólo lectura a una base de datos sqlite en un apk?
- No se ha podido abrir la base de datos de georreferencias de vista web de Android
- Consultando el valor máximo de una columna en SQLite Para Android
¿Me parece que está haciendo exactamente lo que le estás pidiendo? Usted está pidiendo que reemplace y hace exactamente eso. Eliminará la fila antigua e insertará la nueva.
Dejaría la fila antigua y devolvería esa ID si en su lugar pasó CONFLICT_IGNORE
.
try{ insertWithOnConflict(openHelper_ob.TABLE_NAME,null,contentValues, SQLiteDatabase.CONFLICT_ABORT); } catch(SQLException ex) { Toast.makeText(getApplicationContext(),"name found before plz, change it", Toast.LENGTH_SHORT).show(); }
- ¿Quién está activando onLocationChanged en LocationManager en Android?
- ¿Cuál es una buena manera de limitar el número de palabras que se pueden introducir en una vista de edición de Android?