想象一下以下场景(我允许从我的应用程序备份/恢复,我正在备份/恢复整个 file.db):
用户对数据库进行备份。将来我会更新我的应用程序,它有一个新版本的数据库。如果用户使用旧版本恢复数据库会发生什么?
我怎样才能避免这种问题?
使用 BackupHelper 是个好主意吗?我做了一个我的数据库最坏情况的模拟,给了20k,BackupHelper推荐小于1mb,用它会不会是个好主意?我认为我的应用程序永远不会超过 100kb。
想象一下以下场景(我允许从我的应用程序备份/恢复,我正在备份/恢复整个 file.db):
用户对数据库进行备份。将来我会更新我的应用程序,它有一个新版本的数据库。如果用户使用旧版本恢复数据库会发生什么?
我怎样才能避免这种问题?
使用 BackupHelper 是个好主意吗?我做了一个我的数据库最坏情况的模拟,给了20k,BackupHelper推荐小于1mb,用它会不会是个好主意?我认为我的应用程序永远不会超过 100kb。
可能这不是最好的方法,但您可以这样做:
1-将数据库版本存储在数据库中。
2- 恢复数据库后,检查数据库版本并进行相应的更改。像
void afterRestoration()
{
long dbVersion = get from db;
if(dbVersion == 1)
{
alter table1 add column1;
}
else
{
}
}
您可以通过 a 访问 SQLite 数据库SQLiteOpenHelper
,它提供了三个回调onCreate()
:onUpgrade()
和onOpen()
。
构造函数声明一个version
参数,并在内部将数据库版本(存储在文件中)与提供的参数进行比较。如果请求的版本比文件的版本新,onUpgrade(db, old, new)
则会调用您的版本,您将有机会更改表、填充行等。
恢复过程应该简单地关闭所有打开的游标和助手并复制新文件。