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:

// 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!

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: My App Widget con ListView no se actualiza a través del botón o período de actualización
  • Multipart Subir a Amazon S3 usando Retrofit
  • Fragmento de actualización en la selección de opciones de fragmentos de diálogo
  • ¿Cómo puedo actualizar una base de datos sin quitar los datos que el usuario introdujo en la base de datos anterior?
  • Aplicación Phonegap para Android sin Phonegap Build
  • ¿Cómo forzar que Webview de Android se repinta en los cambios de DOM?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.