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
- Mantener la misma base de datos SQLite al actualizar y la aplicación de Android de la versión Lite a Pro
- Actualizar tabla Sqlite si campo de cadena comienza con signo más (+)?
- Android sqlite rollback
- Android SQLite - cambiando journal_mode
- Visibilidad de variables en SQLiteOpenHelper android
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 configurar el temporizador para llamar a una función cada n minutos?
- Android SQLite ON CONFLICT UPDATE es posible?
- Podemos usar truncar consulta en android sqlite
- Cómo establecer una columna como indexador único en Sqlite
- Evitar duplicar la entrada en la base de datos sqllite android
- Android: Base de datos SQLite. ¿Necesitamos crearlo?
- Permitir sólo la entrada de datos únicos con Android SQLite?
- Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
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; } }
- ¿Cómo insertar un registro SQLite con una fecha y hora establecida en 'ahora' en la aplicación de Android?
- Esqueleto de aplicación para admitir múltiples pantallas