Pour ajouter des points manquants ici, conformément à la demande de Jaskey
La version de la SQLite
base de données est stockée dans le fichier de base de données.
catch est le constructeur
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Ainsi, lorsque le constructeur d'aide de base de données est appelé avec un name
(2e paramètre), la plate-forme vérifie si la base de données existe ou non et si la base de données existe, elle obtient les informations de version à partir de l'en-tête du fichier de base de données et déclenche le bon rappel.
Comme déjà expliqué dans la réponse précédente, si la base de données avec le nom n'existe pas, elle se déclenche onCreate
.
L'explication ci-dessous explique onUpgrade
cas avec un exemple.
Disons que votre première version de l'application avait le DatabaseHelper
(extension SQLiteOpenHelper
) avec le constructeur passant la version en tant 1
que puis vous avez fourni une application mise à niveau avec le nouveau code source ayant la version passée en tant que 2
, puis automatiquement lorsque le DatabaseHelper
est construit, la plate-forme se déclenche onUpgrade
en voyant le fichier existe déjà, mais la version est inférieure à la version actuelle que vous avez passée.
Supposons maintenant que vous envisagez de fournir une troisième version de l'application avec la version db as 3
(la version db est augmentée uniquement lorsque le schéma de la base de données doit être modifié). Dans de telles mises à niveau incrémentielles, vous devez écrire la logique de mise à niveau de chaque version de manière incrémentielle pour un meilleur code maintenable
Exemple de pseudo-code ci-dessous:
@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);
}
}
Notez la break
déclaration manquante au cas où 1
et 2
. C'est ce que je veux dire par mise à niveau incrémentielle.
Dites si l'ancienne version est 2
et nouvelle version 4
, la logique sera mise à jour de la base de données 2
à 3
puis à4
Si ancienne version est 3
et nouvelle version 4
, il suffit d' exécuter la logique de mise à niveau pour 3
la4