当应用程序版本号更改时处理数据库更改
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() 调用。
我正在尝试找出处理数据库升级和版本控制的最佳方法。
目前我在做点发布时删除数据库并注销用户,这不是很好的体验。
任何人都可以推荐任何执行此操作的技巧吗?
您的数据库版本独立于您的应用程序版本。如果您的数据库模式根本没有改变,那么在更新期间您不需要对数据库做任何事情。
当您的数据库架构发生变化时,您应该在 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() 调用。