Lors de l'installation d'une version plus récente/existante d'une application, la base de données SQLite est créée au lieu d'être réutilisée - la base de données existante disparaît.
Voici comment se déroulent mes cours
class HDDBAdapter { int DB_LOCA_VERSION = 1; HDDBOpenHelper hdHelper;
`HDDBAdapter(_ctxt) {
hdHelper = new HDDBOpenHelper(_ctxt, "mydb.db", null, DB_LOCA_VERSION);
}
open() {
try {
db =hdHelper.getWritableDatabase();
}
catch ...
}
static class HDDBOpenHelper extends SQLiteopenHelper {
public HunyDewDBOpenHelper(Context ct, String n, CursorFactory cf, int v) {
super(ct, n, cf, vv);
}
private static final String DB_CREATE_BOX = "create table " + "mydb.db" + "("
+ ... + ");";
public void onCreate(SQLiteDatabase arg0) {
arg0.setVersion(DB_LOCA_VERSION);
arg0.execSQL(DB_CREATE_BOX);
}
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
super.onOpen(db);
}`
}
La première fois que je lance l'application - l'application crée une base de données avec mes entrées. Ensuite, je charge une version plus récente de l'application - DB_LOCA_VERSION
reste le même. Dans la nouvelle version, c'est la logique non liée à la base de données qui a été modifiée.
J'ai donc d'abord "forcé l'arrêt" de l'application ("Clear Data" n'est pas exécuté), puis désinstallé l'application. Maintenant, je lance la nouvelle version - cette nouvelle version n'utilise pas la base de données existante - elle en crée une nouvelle. Comment cela se fait-il ? Je veux utiliser la base de données existante. Veuillez me faire savoir si quelque chose m'échappe. Tous les indices/points/questions seront utiles.
Lorsque je l'installe, il échoue apparemment à l'intérieur getWritableDatabase
alors onCreate
est appelé en premier - avant onOpen
. Veuillez noter que le constructeur de HDDBAdapter
est inchangée dans toutes les versions de l'application. hdHelper
pour l'existant "mydb.db" ? Et ne pas avoir getWritableDatabase
cause onCreate
pour être invoqué.
Merci.