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

并确保在您的情况下日志输出显示“4”而不是 3。

于 2012-07-16T21:23:35.583 回答
1

这只是一个猜测。我遇到了同样的问题,所以我遇到了这篇文章。后来我意识到我正在使用sqLiteDatabase.beginTransaction();sqLiteDatabase.endTransaction();sqLiteDatabase.setTransactionSuccessful();在我结束交易之前没有打电话。我把它放进去,它修好了。希望这会有所帮助,尽管我知道它已经很晚了。

于 2016-02-08T11:42:18.317 回答