Android & OrmLite: ONUPGRADE schlägt fehl
Frage
Ich habe ein kleines Problem mit OrmLite auf Android.
Wenn ich die Datenbankversion erhöhen, wird die onUpgrade
Methode wie in meinem OrmLite Helper erwartet genannt. Nach dem Upgrade wird die onCreate
Methode aufgerufen und ich erhalte diese Ausnahme:
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
Ich habe keine Ahnung, warum die gelöscht Verbindung nicht die gleiche wie die gespeichert ist.
Ich habe auch Funktionen der Datenbank setzen (insert ...) in die OrmLite Helper-Klasse. Vielleicht könnte dies ein Problem sein?!?
Ein Ausschnitt aus meiner Hilfsklasse:
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);
}
}
Ich denke, es ist etwas einfach fehlt mir.
Vielen Dank im voraus für Ihre Mühe.
Lösung
Ok, ich sehe das Problem, und es existiert leider im Beispielprogramm als auch. In der ORMLite Helper-Klasse sollte die onUpgrade
Methode verwenden:
onCreate(db, connectionSource);
anstelle der folgenden, die die Unterklasse ruft:
onCreate(db);
Ich habe reproduziert dieses Problem in dem HelloAndroid
Beispielprogramm, der behoben wurde. Ich habe auch richtig dies in der OrmLiteSqliteOpenHelper
Basisklasse in der Android Seite des ORMLite Code festgelegt. Sorry für das Problem.