gpt4 book ai didi

java - SQLiteOpenHelper onUpgrade 被多次调用

转载 作者:行者123 更新时间:2023-11-29 22:02:53 29 4
gpt4 key购买 nike

我的 Android 应用程序中有一个只读数据库,我会定期更新该数据库。该应用始终在其 Assets 中携带最新版本的数据库。

我增加了传递给 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。

版本不固定的任何想法?

最佳答案

好吧,有几件事。

“copyDataBase()”调用有点可疑,因为它可能会复制一些已保存的数据库副本,其中包含旧版本代码。 db.getVersion() 可能正在使用传递给辅助类的构造函数的任何内容,而不是实际从任何地方读取它。所以我会仔细检查或发布它。

还要确保你确实从你的子类中调用了 super 构造函数:

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

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

关于java - SQLiteOpenHelper onUpgrade 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511977/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com