Para agregar más puntos faltantes aquí, según la solicitud de Jaskey
La versión de la base de datos se almacena en el SQLite
archivo de la base de datos.
catch es el constructor
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Entonces, cuando se llama al constructor auxiliar de la base de datos con un name
(segundo parámetro), la plataforma verifica si la base de datos existe o no y si la base de datos existe, obtiene la información de la versión del encabezado del archivo de la base de datos y activa la devolución de llamada correcta
Como ya se explicó en la respuesta anterior, si la base de datos con el nombre no existe, se dispara onCreate
.
La explicación a continuación explica el onUpgrade
caso con un ejemplo.
Digamos, su primera versión de la aplicación tenía la versión DatabaseHelper
(que se extendía SQLiteOpenHelper
) con el constructor que pasaba la versión 1
y luego proporcionó una aplicación actualizada con el nuevo código fuente que tenía la versión aprobada 2
, y automáticamente cuando DatabaseHelper
se construye, la plataforma se dispara onUpgrade
al ver que el archivo ya existe, pero la versión es inferior a la versión actual que ha pasado.
Ahora supongamos que planea dar una tercera versión de la aplicación con la versión db como 3
(la versión db se incrementa solo cuando se va a modificar el esquema de la base de datos). En tales actualizaciones incrementales, debe escribir la lógica de actualización de cada versión de forma incremental para obtener un mejor código mantenible
Ejemplo de pseudocódigo a continuación:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Observe la break
declaración que falta en el caso 1
y 2
. Esto es lo que quiero decir con actualización incremental.
Decir si la versión antigua es 2
y nuevas versiones 4
, entonces la lógica se actualice la base de datos a partir 2
de 3
y después de4
Si la versión antigua es 3
y nuevas versiones 4
, se acaba de ejecutar la lógica de actualización para 3
a4