room example destructive dbhelper database android migration

database - example - ¿Cómo hacer migraciones de esquema de base de datos en Android?



migration room (7)

¿Hay una forma estándar de hacer migraciones de esquema de base de datos en Android? Por ejemplo, el usuario instala una versión más nueva de mi aplicación de Android, pero la nueva versión necesita hacer actualizaciones al esquema de la base de datos (¡y borrar la base de datos del usuario y comenzar de nuevo no es una opción!). Así que necesito ejecutar algunas instrucciones ALTER y / o copiar tablas la primera vez que se ejecute mi nueva versión.


A partir de la versión 3.0, Flyway ahora admite migraciones de base de datos en Android. Funciona con SQLite, pero también con cualquier otra base de datos que desee utilizar (local en memoria, o una base de datos en el servidor para aplicaciones de dos niveles).

Las migraciones se pueden escribir tanto en SQL como en Java.


Con un poco de reflexión, casi puede automatizar muchos de los métodos de SQLiteOpenHelper. Eche un vistazo a esta publicación del blog http://www.greenmoonsoftware.com/2012/02/sqlite-schema-migration-in-android/

Actualización: Me encontré con algunos problemas si las actualizaciones de la base de datos tardan un poco en completarse. Eche un vistazo a esta entrada de blog para una implementación que me funcione. http://www.greenmoonsoftware.com/2012/05/android-developer-how-to-safely-update-the-application-database/


La respuesta de Yanchenko es correcta, sin embargo, es posible que desee echar un vistazo a Droid Migrate , que es un marco que escribí que hace un uso extensivo de SQLiteOpenHelper para facilitar las migraciones automáticas de SQLite (muy parecido a cómo lo hace Rails).


Puede mejorar el SQLiteOpenHelper predeterminado con la biblioteca Android-Migrator , que le permite aplicar migraciones desde archivos sql en la carpeta de assets Android.


Sé que este es antiguo, pero he desarrollado un complemento de eclipse de código abierto que es un lenguaje específico del dominio (DSL escrito con XText) que le permite especificar una base de datos como una lista de migraciones.

Genera su ContentProvider, SqliteOpenHelper y Contract para usted, en una API que se parece a una API como la API de Contactos o la Media API.

He escrito una guía básica que te ayuda a comenzar aquí http://robotoworks.com/mechanoid-plugin/mechanoid-db/

Hasta el momento es compatible con crear tablas, crear vistas y alterar sentencias de tablas, espero implementar completamente la sintaxis de Sqlite donde sea apropiado para este DSL.

Espero que ayude y perdón por el spam! :)


Sí, SQLiteOpenHelper tiene soporte para migrar entre diferentes versiones de esquemas de base de datos.

La actualización se realiza mediante la implementación

public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)

Y también se admite el retroceso a una versión anterior:

public abstract void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)


Todas las respuestas anteriores con respecto a SQLiteOpenHelper son correctas, pero todas contienen un tipo de antipattern: crear / modificar la estructura de DB con cadenas. Hace que el desarrollo y el mantenimiento sean más caros. A veces, una migración consta de muchas declaraciones, algunas de ellas pueden ser bastante grandes. Escribiéndolos como cuerdas, sin ninguna sintaxis destacada ... bueno, para estructuras pequeñas podría funcionar, pero para algunas más grandes sería una pesadilla.

Una mejor manera de administrar los cambios de esquema sería mantener cada script de migración en un archivo externo y hacer que el método de actualización de SQLiteOpenHelper los ejecute automáticamente, en el orden correcto. Aquí hay un artículo que cubre este tema: http://www.vertabelo.com/blog/sqlite-on-android-handling-database-structure-changes . Espero que esto ayude.