Inserción SQLite de Android única

Pregunta bastante simple, pero no puedo encontrar la documentación medio-decente de la hormiga en ella. Así que he creado mi SQLite db, pero tiene dos problemas o uno dependiendo de cómo se mire! El db crea bien y puedo mostrar los datos en un listview básico, sin embargo, al cambiar la orientación del teléfono / emulador, las sentencias de insertar se ejecutan de nuevo y duplicar todos los registros. Supongo que esto tiene algo que ver con todo el código que se coloca dentro del método OnCreate (). Sin embargo, mi pregunta principal es cómo hacer INSERT UNIQUE o consultar el db para ver si el registro existe? Sólo podría encontrar cualquier buena documentación sobre los parámetros de SQLite DB en la plataforma Android.

Cualquier ayuda es muy obligado!

Aclamaciones

3 Solutions collect form web for “Inserción SQLite de Android única”

Debe hacer uso del método estático DatabaseUtils .stringForQuery () que ya está en Android SDK para recuperar fácilmente un valor, este ejemplo es para String bot también hay un método para Long

 stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs) 

Método de utilidad para ejecutar la consulta en el db y devolver el valor en la primera columna de la primera fila.

Algo como

 String myString=DatabaseUtils.stringForQuery(getDB(),query,selectionArgs); 

Este ejemplo fue para obtener un valor de cadena, pero se puede adaptar fácilmente para obtener un valor Long y su consulta debería ser algo así como

 select count(*) from mytable where field1='stringtocheckagainst' 

Si esto devuelve un número mayor que el cero, entonces el campo ya existe en la base de datos.

También busque en el código para manejar los cambios de orientación.


ACTUALIZACIÓN por @nutone:

En API 11 y versiones superiores, también puede utilizar las funciones DatabaseUtils.queryNumEntries para obtener el número de filas (filtradas) directamente.

 long count = DatabaseUtils.queryNumEntries(getDB(), table, query, selectionArgs); 

SQLite tiene un comando INSERT OR REPLACE ( REPLACE para abreviar, o use SQLiteDatabase.replace() ) que puede hacer lo que quiera.

Sin embargo, sugeriría que su aplicación no debería volver a insertarse en la base de datos cada vez que se cree su actividad, a menos que realmente la necesite, por lo que quizás desee examinar el cambio del diseño.

Una cosa es que necesita para manejar su problema de cambio de orientación, para acceder a la base de datos en cada cambio de orientación consume mucho.

En segundo lugar, con respecto al problema del registro duplicado de cheques, puede definir la columna como única como

 CREATE TABLE table_name(column_definition, unique(column_names) ON CONFLICT replace);` hen 

Puede realizar insertar como de costumbre, el db se aseguraría de que no existen duplicados.

  • SQLiteException: Token no reconocido al leer de la base de datos
  • ¿Qué podría estar causando este SQLite CursorWindowAllocationException?
  • Android: ¿Cómo acceder a los resultados de Cursor cuando INNER JOIN se realiza?
  • La base de datos SQLite ..onCreate () no se está llamando
  • Cómo escribir la cláusula WHERE IN desde un dymanic ArrayList para la consulta SQLite de Android
  • Crear base de datos SQLite en android
  • Tener varios SQLiteOpenhelper en una aplicación Android
  • ¿Cómo recuperar un ID del elemento seleccionado en un Spinner dinámico?
  • Base de datos sqlite - attach
  • Android: ¿necesito cerrar los objetos Cursor?
  • Cómo implementar SQLCipher cuando se utiliza SQLiteOpenHelper
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.