4

AndroidのOrmLiteに小さな問題があります。

データベースのバージョンをインクリメントする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

クリアされた接続が保存された接続と同じでない理由がわかりません。

データベース関数(挿入...)もOrmLiteHelperクラスに入れました。多分これは問題かもしれませんか?!?

ヘルパークラスのスニペット:

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

それは私が見逃している単純なものだと思います。

よろしくお願いします。

4

1 に答える 1

7

わかりました。問題が発生しましたが、残念ながらサンプルプログラムにも問題があります。ORMLiteヘルパークラスでは、メソッドonUpgradeは次を使用する必要があります。

onCreate(db, connectionSource);

サブクラスを呼び出している次の代わりに:

onCreate(db);

HelloAndroidこの問題は、修正されたサンプルプログラムで再現しました。OrmLiteSqliteOpenHelperORMLiteコードのAndroid側の基本クラスでもこれを適切に修正しました。問題をお詫び申し上げます。

于 2010-11-24T20:42:33.027 に答える