Android - 数据库中的新列并从备份中恢复数据库
Android - new column in database and restore DB from backup
在 Android 中,我使用的是 SQLite 数据库,并且有一个包含 ID、姓名、年龄的结构。
用户可以将数据库备份到 Google 驱动器。至此一切正常。
问题是,我正在开发我的应用程序的新版本,并且正在向数据库添加另一列。所以它看起来像ID,姓名,年龄,性别。
我用 onUpgrade(SQLiteDatabase db, int i, int i1)
解决了这个问题,所以如果 DB 的版本比当前版本旧,当我通过 ALTER table 添加新列时,它将 运行 onUpgrade。
到目前为止一切顺利。但是,如果用户已经有了这个新数据库,但在 Google 驱动器上有旧数据库并且他从云端恢复了那个旧数据库怎么办?
当数据库文件被旧版本替换时,onUpgrade 运行 会立即执行吗?还是我需要在每次从云恢复后强制执行 运行 onUpgrade?
不确定 onUpgrade 何时执行 - 仅在应用程序启动时执行,还是在调用任何数据库操作时执行,并且它会发现版本差异?
Will the onUpgrade run immediately when the db file is replaced with
older version...
否,onUpgrade()
数据库被替换后不会被调用。
do I need to force to run onUpgrade after every restore from cloud?
你不应该打电话给 onUpgrade()
.
还原过程完成后,您可以调用 getWritableDatabase()
或 getReadableDatabase()
来打开数据库。
此时现有数据库的版本与您在 SQLiteOpenHelper
class 中的代码的差异将调用 onUpgrade()
.
在 Android 中,我使用的是 SQLite 数据库,并且有一个包含 ID、姓名、年龄的结构。
用户可以将数据库备份到 Google 驱动器。至此一切正常。
问题是,我正在开发我的应用程序的新版本,并且正在向数据库添加另一列。所以它看起来像ID,姓名,年龄,性别。
我用 onUpgrade(SQLiteDatabase db, int i, int i1)
解决了这个问题,所以如果 DB 的版本比当前版本旧,当我通过 ALTER table 添加新列时,它将 运行 onUpgrade。
到目前为止一切顺利。但是,如果用户已经有了这个新数据库,但在 Google 驱动器上有旧数据库并且他从云端恢复了那个旧数据库怎么办?
当数据库文件被旧版本替换时,onUpgrade 运行 会立即执行吗?还是我需要在每次从云恢复后强制执行 运行 onUpgrade?
不确定 onUpgrade 何时执行 - 仅在应用程序启动时执行,还是在调用任何数据库操作时执行,并且它会发现版本差异?
Will the onUpgrade run immediately when the db file is replaced with older version...
否,onUpgrade()
数据库被替换后不会被调用。
do I need to force to run onUpgrade after every restore from cloud?
你不应该打电话给 onUpgrade()
.
还原过程完成后,您可以调用 getWritableDatabase()
或 getReadableDatabase()
来打开数据库。
此时现有数据库的版本与您在 SQLiteOpenHelper
class 中的代码的差异将调用 onUpgrade()
.