Actualizar la base de datos SQLite de una aplicación de Android de producción, ¿es correcto?
Como dice el título, tengo una aplicación de producción de Android con cerca de 1000 instalaciones. Tuve que hacer un cambio de DB en SQLite, hasta este punto la versión de la base de datos SQLite se ha puesto a la versión "1".
Esperemos que explique el código de abajo lo suficiente en los comentarios, este código reside en mi clase SQLiteOpenHelper por lo que el método onUpgrade es parte de la clase:
- Cancelar En la suscripción de facturación de aplicaciones en android
- Android - Herencia y clases abstractas en GSon + RetroFit
- Cordova Android Upgrade - No se puede encontrar el módulo 'lodash / object / assign' Error
- Implementar reintento Cuando la lógica
- Comparación de las bibliotecas de redes Android: OkHTTP, Retrofit y Volley
// Provides an upgrade path for the DB when the apps version is updated. @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // First version of the DB was 1. Logic: each if statement will // alter the DB cumulatively based on the version code. So, if the // newVersion was version 3, there would be two if statements, one // for oldVersion 1 and one for oldVersion 2. oldVersion 2 will // contain the logic for upgrading from version 2 to 3, while // oldVersion 1 will contain a combination of alter statements // allowing the database to upgrade from version 1 directly to // version 3. if (oldVersion == 1) { db.execSQL("ALTER TABLE plans ADD COLUMN " + App.CURRENCYCODE + " TEXT"); Locale locale = Locale.getDefault(); ContentValues content_values = new ContentValues(); content_values.put(App.CURRENCYCODE, locale.toString()); db.update(App.DBPLANS, content_values, App.ID + " > ?", new String[] { "0" }); } if (oldVersion == 2) { // Placeholder for next database upgrade instructions. } }
Por favor, hágamelo saber si hay alguna trampa aquí. Hasta ahora, ha probado muy bien, aunque estoy muy preocupado por estropear mi primera actualización de DB. Tengo un millar de usuarios o algo así, odiaría perderlos todos.
¡Gracias de nuevo!
- FragmentPagerAdapter con ViewPager y dos Fragmentos. Ir a la primera de la segunda y actualizar el primer texto
- Retrofit 2 no puede cargar un archivo con dos parámetros adicionales de cadena separados
- En Android Market, ¿con qué frecuencia los desarrolladores pueden / deben actualizar sus archivos apk?
- Refreshing ArrayAdapter onResume
- ¿Cómo funcionan las actualizaciones de las aplicaciones para Android técnicamente?
- Android: problemas para actualizar a Android SDK Tools, revisión 7
- Patrón de diseño para la interfaz de retrofit
- Retrofit GSON serialize Fecha de la cadena json en long o java.lang.Long
Cuando necesito actualizar una base de datos como esta, normalmente lo hago con una instrucción switch donde los casos se suceden entre sí, como por ejemplo:
switch (oldVersion) { case 1: // update to version 2 // do _not_ break; -- fall through! case 2: // update to version 3 // again, do not break; case 3: // you're already up to date
Las ventajas de esto es que no terminas repitiendo tus instrucciones de actualización en múltiples if-statements mientras continúas cambiando la base de datos, y agregar una actualización de la base de datos solo requiere agregar una nueva instrucción case, sin actualizar varios bloques de código.
Hay a veces excepciones a esto, tal como una columna agregada en una versión pero suprimida en una futura, así que usted necesita prestar la atención como usted va.
- Android NDK. Ninguna sección de C / C ++ en las propiedades del proyecto de Eclipse
- ¿Cómo llevar más recientemente la actividad de terceros usados a la delantera?