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 SQLitearchivo 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 onUpgradecaso 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 1y luego proporcionó una aplicación actualizada con el nuevo código fuente que tenía la versión aprobada 2, y automáticamente cuando DatabaseHelperse construye, la plataforma se dispara onUpgradeal 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 breakdeclaración que falta en el caso 1y 2. Esto es lo que quiero decir con actualización incremental.
Decir si la versión antigua es 2y nuevas versiones 4, entonces la lógica se actualice la base de datos a partir 2de 3y después de4
Si la versión antigua es 3y nuevas versiones 4, se acaba de ejecutar la lógica de actualización para 3a4