Android & Ormlite: OnUpgrade falha
Pergunta
Tenho um pequeno problema com o Ormlite no Android.
Quando eu incremento a versão do banco de dados, o onUpgrade
O método é chamado como esperado no meu ajudante Ormlite. Após a atualização, o onCreate
O método é chamado e eu recebo esta exceção:
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
Não tenho idéia de por que a conexão limpa não é a mesma que a salva.
Eu também coloquei minhas funções de banco de dados (insira ...) na classe auxiliar Ormlite. Talvez isso possa ser um problema?!?
Um trecho da minha classe ajudante:
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);
}
}
Eu acho que é algo simples que estou perdendo.
Agradecemos antecipadamente por seu esforço.
Solução
Ok, eu vejo o problema e ele também existe no programa de amostra. No Ormlite classe auxiliar, a onUpgrade
Método deve usar:
onCreate(db, connectionSource);
Em vez do seguinte, que chama a subclasse:
onCreate(db);
Eu reproduzi esse problema no HelloAndroid
programa de exemplo que foi corrigido. Eu também consertei isso corretamente no OrmLiteSqliteOpenHelper
Classe base no lado Android do código Ormlite. Desculpe pelo problema.