Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: actualizar la versión de la base de datos y agregar nueva tabla

Ya he creado tablas sqlite para mi aplicación, pero ahora quiero añadir una nueva tabla a la base de datos.

Cambié la versión de DB como abajo

private static final int DATABASE_VERSION = 2; 

Y Añadido string para crear tabla

 private static final String DATABASE_CREATE_color = "CREATE TABLE IF NOT EXISTS files(color text, incident_id text)"; 

onCreate y onUpgrade como se onUpgrade continuación:

 @Override public void onCreate(SQLiteDatabase database) { database.execSQL(DATABASE_CREATE_incident); database.execSQL(DATABASE_CREATE_audio); database.execSQL(DATABASE_CREATE_video); database.execSQL(DATABASE_CREATE_image); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //drop table and add new tables when version 2 released. db.execSQL(DATABASE_CREATE_color); } 

Pero por alguna razón la nueva tabla no está siendo creada. ¿Qué estoy haciendo mal?

  • Cómo reemplazar el archivo de base de datos sqlite existente con un nuevo archivo de base de datos en android
  • SQLiteOpenHelper - ¿Cómo se crea la base de datos?
  • Seguridad de base de datos Sqlite
  • Idioma para cerrar un cursor
  • SQLite Database: SQLiteDiskIOException: error de E / S de disco (código 1802)
  • Android SimpleCursorAdapter no se actualiza cuando cambia la base de datos
  • Sincronización local de SQLite con Firebase
  • Android SQLite Eliminar fila de la tabla Donde 2 Argumentos
  • 3 Solutions collect form web for “Android: actualizar la versión de la base de datos y agregar nueva tabla”

    1. Acerca de onCreate () y onUpgrade ()

    onCreate(..) se llama cuando la aplicación está recién instalada. onUpgrade se llama cuando la aplicación se actualiza y se inicia y la versión de la base de datos no es la misma.

    2. Incremento de la versión db

    Necesitas un constructor como:

     MyOpenHelper(Context context) { super(context, "dbname", null, 2); // 2 is the database version } 

    IMPORTANTE: ¡Incrementar la versión de la aplicación por sí solo no es suficiente para que onUpgrade sea ​​llamado!

    3. No se olvide de sus nuevos usuarios!

    No te olvides de añadir

     database.execSQL(DATABASE_CREATE_color); 

    A su método onCreate () o bien las aplicaciones recién instaladas carecerán de la tabla.

    4. Cómo lidiar con múltiples cambios en la base de datos con el tiempo

    Cuando tenga sucesivas actualizaciones de aplicaciones, varias de las cuales tienen actualizaciones de base de datos, desea asegurarse de que comprueba oldVersion :

     onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch(oldVersion) { case 1: db.execSQL(DATABASE_CREATE_color); // we want both updates, so no break statement here... case 2: db.execSQL(DATABASE_CREATE_someothertable); } } 

    De esta manera, cuando un usuario actualiza de la versión 1 a la versión 3, obtiene ambas actualizaciones. Cuando un usuario actualiza de la versión 2 a la 3, sólo obtiene la actualización de la revisión 3 … Después de todo, no puede contar con el 100% de su base de usuarios para actualizar cada vez que publique una actualización. A veces se saltan una actualización o 12 🙂

    5. Mantener sus números de revisión bajo control mientras desarrolla

    Y finalmente … llamando

     adb uninstall <yourpackagename> 

    Desinstala totalmente la aplicación. Al instalar de nuevo, que está garantizado para golpear onCreate que le impide tener que seguir incrementando la versión de la base de datos en la estratosfera a medida que …

    Su código parece correcto. Mi sugerencia es que la base de datos ya piensa que ha actualizado. Si ejecutó el proyecto después de incrementar el número de versión, pero antes de agregar la llamada execSQL , la base de datos en su dispositivo de prueba / emulador ya puede creer que está en la versión 2.

    Una forma rápida de verificar esto sería cambiar el número de versión a 3 – si se actualiza después de eso, sabes que fue sólo porque tu dispositivo creía que ya estaba actualizado.

    Puede utilizar el método onUpgrade de onUpgrade . En el método onUpgrade, obtiene oldVersion como uno de los parámetros.

    En el onUpgrade use un switch y en cada case use el número de versión para realizar un seguimiento de la versión actual de la base de datos.

    Lo mejor es pasar de oldVersion a newVersion , incrementar la version por 1 a la vez y luego actualizar la base de datos paso a paso. Esto es muy útil cuando alguien con la versión 1 de la base de datos actualiza la aplicación después de un tiempo largo, a una versión que usa la versión 7 de la base de datos y la aplicación comienza a fallar debido a ciertos cambios incompatibles.

    A continuación, las actualizaciones de la base de datos se realizarán paso a paso, cubriendo todos los casos posibles, es decir, incorporando los cambios en la base de datos realizados para cada nueva versión e impidiendo así que su aplicación se bloquee.

    Por ejemplo:

     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " + "name_of_column_to_be_added" + " INTEGER"; db.execSQL(sql); break; case 2: String sql = "SOME_QUERY"; db.execSQL(sql); break; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.