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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top