在Android中,我使用的是SQLite数据库,它有一个ID、名称和年龄的结构。
用户可以将数据库备份到Google Drive。直到现在一切正常。
问题是,我正在开发我的应用程序的新版本,并在数据库中添加另一列。所以它看起来像身份证、姓名、年龄、性别。
我用onUpgrade(SQLiteDatabase db, int i, int i1)
解决了这个问题,所以如果DB的版本与当前版本一样旧,那么当我通过ALTER表添加新列时,它将运行onUpgrade。
到目前为止还不错。但是,如果用户已经有了这个新数据库,但在谷歌硬盘上有了旧数据库,他从云中恢复了旧数据库呢?
当数据库文件被替换为旧版本时,onUpgrade会立即运行吗?还是每次从云中恢复后都需要强制运行onUpgrade?
不确定onUpgrade是何时执行的——只在应用程序启动时执行,还是在调用任何DB操作并看到版本差异时执行?
当db文件被替换为旧版本。。。
否,在数据库被替换后不会调用onUpgrade()
。
每次从云中恢复后,我需要强制运行onUpgrade吗?
您不应该调用onUpgrade()
恢复过程完成后,您可以调用getWritableDatabase()
或getReadableDatabase()
来打开数据库
此时,现有数据库的版本与SQLiteOpenHelper
类中代码的版本之间的差异将调用onUpgrade()
。