Confusion: Comment SQLiteOpenHelper onUpgrade() se comporte? Et, ensemble, avec l'importation d'une vieille sauvegarde de base de données?

supposons que j'ai une base de données de la table test_table avec 2 colonnes et un correspondant de créer un script dans le SQLiteOpenHelper:

DB_VERSION = 1:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B);
}

C'est la première version de l'application 1, qui est publié dans le Play Store.

Après un certain temps, il y a une mise à jour de l'application et de l'utilisé la base de données.
Je suppose que le SQLiteOpenHelper classe doit être adapté comme ceci:

DB_VERSION = 2:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C)");
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_C");
}

Après un certain temps, une autre application de mise à jour:

DB_VERSION = 3:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C, COL_D)");
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_D");
}

--> C'est là que j'ai besoin de conseils.
Si l'utilisateur installe la version de l'application 1, il a des Colonnes A et B.
Si il met ensuite à jour de la version 2, onUpgrade incendies et ajoute une colonne C.
Les nouveaux utilisateurs qui installer à partir de zéro obtenir les 3 colonnes via l'instruction create.
Si l'utilisateur met à jour à la version 3, onUpgrade feux de nouveau et d'une colonne D est ajoutée.
Mais QUE faire SI l'utilisateur installe la version de l'application 1, puis saute de la mise à jour de la version 2 et les mises à jour de la version 3? Puis il aurait manqué le

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

    {
    db.execSql("ALTER TABLE test_table ADD Column COL_C");
    }

partie et seulement

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

    {
    db.execSql("ALTER TABLE test_table ADD Column COL_D");
    }

serait appelée, ce qui conduit à une table test_table(COL_A, COL_B, COL_D)??

Quelle est la bonne façon de gérer la base de données des mises à niveau d'une application, de sorte que l'utilisateur ne veut pas perdre ses données?
Disposez-vous pour vérifier tous les possibles (vieux) versions dans le onUpgrade() la méthode et exécuter les différentes instructions alter table basée sur cette version?

Je demande car dans mon application, l'utilisateur a la possibilité d'exporter et d'importer les données, ce qui n'est rien de plus que l'exportation: copie de l'ensemble de la base de données à l'écart et à l'importation: remplacer l'application de base de données avec la copie de sauvegarde de la base de données.

Ce qui se passe si l'utilisateur a la version de l'application 1, les exportations de la base de données, les mises à niveau de l'application (nouvelle structure de base de données) et les importations de l'ancienne version 1 de sauvegarde?
--> Comment SQLiteOpenHelper se comporter?
--> Quelle est la bonne façon de gérer db mises à niveau avec de l'importation/exportation de la fonctionnalité?

InformationsquelleAutor Toni Kanoni | 2013-01-19