2012-11-12 160 views
0

想象以下场景Android的关注(我允许我的应用程序备份/恢复,我在做备份/恢复白皙整个file.db):与恢复数据库

用户对数据库进行备份。 将来我会对我的应用程序进行更新,该应用程序具有新版本的数据库。 如果用户使用旧版本恢复数据库会发生什么情况?

我该如何避免这类问题?

这将是一个好主意,使用BackupHelper?我模拟了数据库中最糟糕的情况,并给了20k,建议BackupHelper小于1mb,使用它会是一个好主意?我认为我的应用永远不会超过100kb。

回答

1

您通过SQLiteOpenHelper,它提供了三种回调访问SQLite数据库。

构造声明一个version参数,并在内部数据库的数据库版本与提供的参数进行比较(其被存储在文件中)。如果请求的版本比文件更新,则调用onUpgrade(db, old, new),您将有机会更改表格,填充行等。

恢复过程应该简单地关闭所有打开的游标和助手并复制新文件。

+0

谢谢它可以工作=)。嘿你怎么看待使用BackupHelper进行备份和恢复?我模拟了数据库中最糟糕的情况,并给了20k,建议BackupHelper小于1mb,使用它会是一个好主意?我认为我的应用永远不会超过100kb。 – weldsonandrade

+0

这取决于。备份框架旨在成为使用户数据在工厂重置和设备升级后不受影响的自动化方式。如果这就是你想要的,没关系(文件大小在这里并不重要)。如果您需要多个客户端同步或其他相关功能,则必须自己对其进行编码。我想说,从框架开始,因为它很快速且有效,并且了解您的应用程序如何发展以及您的用户需要什么 – Raffaele

1

可能这是不是最好的办法,但你可以做到这一点是:

1存储数据库版本在数据库中。

2-恢复数据库后,检查数据库版本并相应地进行必要的更改。 onCreate()onUpgrade()onOpen():像

void afterRestoration() 
{ 
    long dbVersion = get from db; 
    if(dbVersion == 1) 
    { 
    alter table1 add column1; 
    } 
    else 
    { 
    } 
} 
+0

谢谢它可以工作=)。嘿你怎么看待使用BackupHelper进行备份和恢复?我模拟了数据库中最糟糕的情况,并给了20k,建议BackupHelper小于1mb,使用它会是一个好主意?我认为我的应用永远不会超过100kb。 – weldsonandrade

+0

我没有用过它!但从文档看,它对我来说是一个很好的解决方案。 –