Android SqliteAssetHelper – fusionar las tablas de la base de datos del activo con el existente

Estoy utilizando Android SqliteAssetHelper biblioteca ( https://github.com/jgilfelt/android-sqlite-asset-helper ) He enviado mi base de datos utilizando esta biblioteca y la base de datos contiene algunos registros en table1. Ahora quiero actualizar mi aplicación con una nueva base de datos con registros adicionales que se deben insertar en la que ya envié. No estoy seguro de cómo escribir exactamente las secuencias de comandos SQL para la actualización, ya que el esquema es el mismo para ambas bases de datos. ¿Alguien probó esto?

Después de los comentarios de la op en otras respuestas, se aclaró que hay dos bases de datos para fusionarse. El operador desea saber si existe una forma conveniente de combinar dos bases de datos junto con la biblioteca SQLiteAssetHelper.

Desafortunadamente, no hay una forma directa de hacerlo porque esa biblioteca también utiliza el mismo patrón de Android para ejecutar un script para modificar una base de datos existente.

La solución consiste en transformar la segunda base de datos (conjunto de 50 registros) en 50 instrucciones INSERT que se pondrán al lado de las 50 existentes. (Hay varias herramientas en Internet para simplificar ese paso para que no tenga que hacerlo a mano.) Así que siempre y cuando la lógica de negocios puede trabajar con ellos todos juntos pueden ir todos en la tabla original si los esquemas son los mismos; o si necesita separarlos, utilice los 50 INSERT aún, pero pídales INSERT a un nombre de tabla diferente.

Luego, una vez que tenga estas 50 instrucciones INSERT con los datos de las 50 nuevas filas, coloque las sentencias en un script de actualización y puede seguir la documentación estándar de la biblioteca sobre cómo ejecutar ese script a través de esta biblioteca.

Puede hacer que esto suceda usando sqldiff para encontrar las diferencias entre un DB antiguo y uno nuevo.

Llama a sqldiff en sus dos bases de datos y canaliza la salida a un archivo que se conforma al formato de actualización de SQL Asset Helper (es decir, <database_name>_upgrade_<from_version>-<to_version>.sql ).

Por lo tanto, todo sería sqldiff database.db database_new.db > database.db_upgrade_1-2.sql

Entonces apenas cerciórese de que el archivo .sql esté en el directorio de los assets/databases y cambie los números de versión en su código de Java (en el caso del ejemplo, de 1 a 2).

  • SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
  • SQLiteOpenHelper - crear base de datos en tarjeta SD
  • La mejor opción para almacenar nombre de usuario y contraseña en la aplicación Android
  • ¿Cuál es el modo de subprocesamiento predeterminado de SQLite en Android?
  • La escritura concurrente a la base de datos android (de múltiples servicios)?
  • Obtención de contexto en onCreate en SQLiteOpenHelper
  • Ejemplo de Android SQLite
  • Error al insertar android.database.sqlite.sqliteconstraintexception error código 19 restricción fallida
  • Conexión de SQLite se filtró aunque todo se cerró
  • Android obtener la imagen de disco de base de datos es malformado (código 11) error
  • Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.