Android et OrmLite: OnUpgrade échoue
Question
J'ai un petit problème avec OrmLite sur Android.
Quand j'incrémenter la version de base de données, la méthode est appelée onUpgrade
comme prévu dans mon OrmLite Helper. Après la mise à niveau, la méthode onCreate
est appelée et je reçois cette exception:
11-24 10:09:45.720: ERROR/AndroidConnectionSource(390): connection saved
com.j256.ormlite.android.AndroidDatabaseConnection@44f0f478 is not the one
being cleared com.j256.ormlite.android.AndroidDatabaseConnection@44f5d310
Je n'ai aucune idée pourquoi la connexion est effacée pas le même que celui enregistré.
J'ai mis aussi mes fonctions de base de données (insérer ...) dans la classe OrmLite Helper. Peut-être que cela pourrait être un problème?!?
Un extrait de ma classe d'aide:
public class OrmLiteDBProvider extends OrmLiteSqliteOpenHelper
implements IEntityProvider, IDBProvider {
//snip
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
Log.i(OrmLiteDBProvider.class.getName(), "Creating database and tables");
TableUtils.createTable(connectionSource, OrgManaged.class);
} catch (SQLException e) {
Log.e(OrmLiteDBProvider.class.getName(),
"Can't create database and tables", e);
throw new RuntimeException(e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
int oldVersion, int newVersion) {
try {
Log.i(OrmLiteDBProvider.class.getName(),
"Database version changed. Dropping database.");
TableUtils.dropTable(connectionSource, OrgManaged.class, true);
// after we drop the old databases, we create the new ones
onCreate(db);
} catch (SQLException e) {
Log.e(OrmLiteDBProvider.class.getName(), "Can't drop databases", e);
throw new RuntimeException(e);
}
}
Je pense que simple de quelque chose que je suis absent.
Merci d'avance pour vos efforts.
La solution
Ok, je vois le problème et il existe, malheureusement, dans le programme d'échantillonnage ainsi. Dans l'assistant ORMLite classe, la méthode onUpgrade
doit utiliser:
onCreate(db, connectionSource);
au lieu des éléments suivants qui appelle la sous-classe:
onCreate(db);
J'ai reproduit ce problème dans le programme d'exemple HelloAndroid
qui a été fixé. J'ai aussi fixé cela correctement dans la classe de base OrmLiteSqliteOpenHelper
dans le côté Android du code ORMLite. Désolé pour le problème.