Android & OrmLite: сбой OnUpgrade - PullRequest
       2

Android & OrmLite: сбой OnUpgrade

4 голосов
/ 24 ноября 2010

У меня небольшая проблема с OrmLite на Android.

Когда я увеличиваю версию базы данных, метод onUpgrade вызывается, как и ожидалось, в моем помощнике OrmLite.После обновления вызывается метод onCreate, и я получаю следующее исключение:

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

Понятия не имею, почему очищенное соединение не совпадает с сохраненным.

Iя также поместил мои функции базы данных (insert ...) в класс OrmLite Helper.Может быть, это может быть проблемой?!?

Фрагмент из моего класса помощников:

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);
    }
}

Я думаю, что мне чего-то не хватает.за ваши усилия.

1 Ответ

7 голосов
/ 24 ноября 2010

Хорошо, я вижу проблему, и, к сожалению, она существует и в примере программы.В вспомогательном классе ORMLite метод onUpgrade должен использовать:

onCreate(db, connectionSource);

вместо следующего, вызывающего подкласс:

onCreate(db);

I 'Мы воспроизвели эту проблему в примере программы HelloAndroid, которая была исправлена.Я также исправил это правильно в базовом классе OrmLiteSqliteOpenHelper на стороне Android кода ORMLite.Извините за проблему.

...