Android & Ormlite: فشل Onupgrade
سؤال
لدي مشكلة صغيرة مع 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
ليس لدي أدنى فكرة عن سبب عدم وجود اتصال تم مسحه هو نفسه الذي تم حفظه.
لقد وضعت أيضًا وظائف قاعدة البيانات الخاصة بي (إدراج ...) في فئة 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);
}
}
أعتقد أنه شيء بسيط أنا في عداد المفقودين.
شكرا مقدما لجهدك.
المحلول
حسنًا ، أرى المشكلة وهي موجودة ، لسوء الحظ ، في برنامج العينة أيضًا. في ال ormlite فئة المساعدة ، onUpgrade
يجب استخدام الطريقة:
onCreate(db, connectionSource);
بدلاً من ما يلي الذي يدعو الفئة الفرعية:
onCreate(db);
لقد استنسخت هذه المشكلة في HelloAndroid
مثال برنامج تم إصلاحه. لقد قمت أيضًا بإصلاح هذا بشكل صحيح في OrmLiteSqliteOpenHelper
الفئة الأساسية في جانب Android من رمز Ormlite. آسف للمشكلة.