当应用程序版本号更改时处理数据库更改

Handling database changes when app version number changes

我正在尝试找出处理数据库升级和版本控制的最佳方法。

目前我在做点发布时删除数据库并注销用户,这不是很好的体验。

任何人都可以推荐任何执行此操作的技巧吗?

您的数据库版本独立于您的应用程序版本。如果您的数据库模式根本没有改变,那么在更新期间您不需要对数据库做任何事情。

当您的数据库架构发生变化时,您应该在 onUpgrade() of your SQLiteOpenHelper. This method is called when you try to access your database and you have updated your database version, as described in the Data Storage Options documentation 中处理数据库更新。

如果您使用第三方库来处理您的数据库,它应该为您处理升级或提供类似的功能。

这里没有升级数据库的通用策略。您所做的完全取决于您的架构在升级之前的样子以及新架构的样子。根据更改的内容,您可以创建新表或列、删除表或列、更新数据库中的行或在表之间移动数据。如果您有关于如何迁移数据的具体问题,请创建一个描述新旧模式的新问题。

我们这样做的方式是,我们 运行 每次应用程序启动时都会调用服务器上的存储过程来获取 SQL 必要时升级数据库的例程。 (sql 可能非常复杂:删除表并使用新结构重新创建它们并插入新值)。我们将数据库的版本存储在数据库本身中,并升级到新版本。

我们不使用 onUpgrade() 调用。