Android / ORMLite Insertar fila con ID

Actualmente utilizo ORMLite para trabajar con una base de datos SQLite en Android. Como parte de esto estoy descargando un montón de datos de un servidor back-end y me gustaría tener estos datos agregados a la base de datos SQLite en el mismo formato exacto que está en el servidor back-end (es decir, los ID son los mismos, etc) .

Por lo tanto, mi pregunta es si relleno mi objeto de entrada de base de datos (lo llamaremos Equipo), incluyendo el campo generado / primario del equipo por setId (), y luego ejecuto un DAO.create () con esa entrada de Equipo Que la ID se guarda correctamente? Lo intenté de esta manera y me parece que este no fue el caso. Si ese es el caso intentaré otra vez y buscaré otros problemas, pero con los primeros pasos sobre el código no pude encontrar uno. Así que esencialmente, si llamo a DAO.create () en un objeto de base de datos con un conjunto de ID, esa ID se enviará a la base de datos y si no lo es, ¿cómo puedo insertar una fila con un valor de clave primaria ya completado?

¡Gracias!

@Femi es correcto que un objeto puede ser un ID generado o un id, pero no ambos. El problema es más que cómo ORMLite almacena el objeto pero también tiene que coincidir con el esquema con el que se generó la base de datos.

ORMLite soporta una opción allowGeneratedIdInsert=true a la anotación @DatabaseField que permite este comportamiento. Esto no es compatible con algunos tipos de base de datos (Derby, por ejemplo), pero funciona bajo Android / SQLite.

Para la posteridad, también puede crear 2 objetos que comparten la misma tabla: una con un ID generado y otra sin. A continuación, puede insertar utilizando el ID de Dao generado para obtener ese comportamiento y el otro Dao para tomar el valor de id establecido por el llamador. Aquí hay otra respuesta hablando de eso . El problema para usted suena como que esto creará una gran cantidad de DAOs adicionales.

La única otra solución es no usar el id para sus propósitos. Deje que la base de datos genere el ID y luego tenga un campo adicional que utilice que se establezca externamente para sus propósitos. Forzar la base de datos-id en ciertas circunstancias me parece un mal patrón.

Desde http://ormlite.com/docs/generated-id :

Boolean si el campo es un campo de ID generado automáticamente. El valor predeterminado es false. Sólo un campo puede tener este conjunto en una clase. Esto le indica a la base de datos que genere automáticamente un id correspondiente para cada fila insertada. Cuando se crea un objeto con un ID generado utilizando el método Dao.create (), la base de datos generará un id para la fila que será devuelta y establecida en el objeto por el método create. Algunas bases de datos requieren secuencias para IDs generados, en cuyo caso el nombre de secuencia se generará automáticamente. Para especificar el nombre de la secuencia use generatedIdSequence. Sólo se puede especificar uno de estos, id y generatedIdSequence.

Debe utilizar generatedId (en cuyo caso todos los identificadores deben generarse) o id (en cuyo caso puede configurarlos), pero no ambos.

  • No se puede degradar la base de datos de la versión 2 a 1 incluso después de una nueva instalación y volver a ejecutar
  • Actualizar ListView después de eliminar la operación
  • Malo rendimiento de SQLite en almacenamiento externo en Android
  • Almacenamiento de datos de Android, Cuándo utilizar SqlLite y cuándo usar JSON, alternativas de Linq
  • ¿Hay alguna manera eficiente de hacer la consulta de base de datos Android más rápido?
  • Archivo JSON VS SQLite android
  • Sqlite convert 'dd.MM.yyyy' formated String hasta la fecha
  • Caracteres especiales de Android Sqlite
  • Capacidad máxima de almacenamiento de la base de datos SQLite
  • SQLite: forma eficiente de eliminar lotes de filas
  • Cómo eliminar miles de registros de sqlite android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.