1

私の Android アプリには、定期的に更新する読み取り専用データベースがあります。アプリは常に最新バージョンのデータベースをアセットに保持しています。

SQLiteOpenHelper サブクラスのコンストラクターに渡すバージョン番号をインクリメントし、(この場合) バージョン 4 に上げます。

次のコードがあります。

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // copy from assets to local storage; version really doesn't matter;
    // DB will be opened from the target location. 
    copyDataBase();
}

読み取り可能なデータベースを取得するために呼び出しを行うと、これが呼び出されます。

SQLiteDatabase db = myDBHelper.getReadableDatabase();
// Here db.getVersion() correctly returns "4", the newVersion.
// db is also usable and has the correct data.

しかし、getReadableDatabase onUpgrade を呼び出すたびに、oldVersion=3 から newVersion=4 に呼び出されます。

バージョンが固執しない理由はありますか?

4

2 に答える 2

1

さて、いくつかのこと。

「copyDataBase()」呼び出しは、古いバージョンのコードが含まれているデータベースの保存済みコピーをコピーしている可能性があるため、少し疑わしいです。db.getVersion() は、ヘルパー クラスのコンストラクターに渡されたものを使用していて、実際にはどこからも読み取っていない可能性があります。だから私はそれを再確認するか、投稿します。

また、サブクラスからスーパー コンストラクターを実際に呼び出していることも確認してください。

   DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        Log.d("DatabaseHelper", "constructor. Version="+DATABASE_VERSION);
    }

また、ログ出力に 3 ではなく「4」が表示されていることを確認してください。

于 2012-07-16T21:23:35.583 に答える