我的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.
为什么版本不坚持的任何想法?
答案 0 :(得分:1)
好几件事。
“copyDataBase()”调用有点可疑,因为它可能会复制一些已保存的数据库副本,其中包含旧版本代码。 db.getVersion()可能正在使用传递给助手类的构造函数的任何内容,而不是实际从任何地方读取它。所以我会仔细检查或发布它。
还要确保您确实从子类中调用了超级构造函数:
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("DatabaseHelper", "constructor. Version="+DATABASE_VERSION);
}
确保日志输出显示“4”而不是3。
答案 1 :(得分:1)
这只是猜测。我遇到了同样的问题所以我遇到了这个帖子。我后来意识到我正在使用sqLiteDatabase.beginTransaction();
和sqLiteDatabase.endTransaction();
但在我结束交易之前没有打电话给sqLiteDatabase.setTransactionSuccessful();
。我把它放入并修复它。希望这有帮助,虽然我知道它很晚。