Android & OrmLite: ONUPGRADE fallisce
Domanda
Ho un piccolo problema con OrmLite su Android.
Quando ho incrementare la versione del database, il metodo onUpgrade
viene chiamato come previsto nel mio OrmLite Helper. Dopo l'aggiornamento, il metodo viene chiamato onCreate
e ottengo questa eccezione:
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
Non ho idea perché la connessione eliminato non è lo stesso di quello salvato.
Ho messo anche le mie funzioni di database (INSERT ...) nella classe OrmLite Helper. Forse questo potrebbe essere un problema?!?
Un frammento della mia classe di supporto:
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);
}
}
Credo che sia qualcosa di semplice che mi manca.
Grazie in anticipo per il vostro sforzo.
Soluzione
Ok, vedo il problema ed esiste, purtroppo, nel programma di esempio pure. Nel href="http://ormlite.com/"> ORMLite classe helper onUpgrade deve utilizzare:
onCreate(db, connectionSource);
al posto dei seguenti elementi chiama la sottoclasse:
onCreate(db);
Ho riprodotto questo problema nel programma di esempio HelloAndroid
che è stato fissato. Ho anche risolto correttamente questo nella classe base OrmLiteSqliteOpenHelper
nel lato Android del codice ORMLite. Ci scusiamo per il problema.