微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在每个App Release Xamarin Forms之后更新/维护SQLite数据库

如何解决在每个App Release Xamarin Forms之后更新/维护SQLite数据库

这是我第一次使用Xamarin应用程序,我是应用程序开发领域的新手,因此我需要一些帮助来确定此过程。 当前,我运行一个PHP Web服务,该服务生成一些在DB browser中运行的sql文件,并获得一个数据库文件,然后将其放入我的Assets and Resources文件夹中。使用每个平台的API,我将数据库复制到一个可写文件夹中,并使用该文件夹运行查询

我遵循了这个非常有用的教程,并且效果很好。 https://medium.com/@hameedkunkanoor/creating-a-sqlite-databse-and-storing-your-data-in-your-android-and-ios-application-in-xamarin-2ebaa79cdff0。 在“初始”设置之后,我将时间戳存储在本地表中,下一次用户打开应用程序时,我传递该时间戳并检索早于该时间戳的数据。我会更新该时间戳记并继续执行该过程。这些数据以JSON格式发送回去,并更新表。

我唯一担心的是,如果要发布一个新版本,在其中添加新表或新列,而该新表或新列不存在于当前数据库版本中,那么我应该如何处理那些更新的Web服务调用?有没有办法监视我的数据库版本?我读过某个地方,在其中我可以忽略表或列之类的尚不存在的新数据,但是我不确定如何做到这一点。 我还看到,如果我在当前表上调用CreateTable,是否可以更新它们?

我每次开发一个新的应用程序时也要作参考,是否需要重新生成一个新的数据库文件以存储在assets / resources文件夹中?是否有一个自动化的过程呢?除了监视数据库的版本以外?

任何帮助/教程/建议将不胜感激。

解决方法

您必须记住,CreateTable已经在为您进行列更新,因为在内部它调用了一个称为MigrateTable的方法,您可以在此处进一步了解它:https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs#L562

但是,您可能必须对数据库进行更高级的修改,例如添加触发器或类似的东西。 在那种情况下,我建议您手动执行修改。

在Xamarin Forms中,我最终得到以下结果: https://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396

永远不是最好的策略,但似乎对我有用。

总结
您必须将数据库版本保存在SQlite数据库的名为user_version的内部标志中,该标志可以通过PRAGMA关键字访问。 每次获得数据库连接时,都必须执行一次检查,以查看当前数据库版本是否与应用程序上一个数据库版本相同。 如果不是,则需要执行数据库更新并设置新的当前版本。

参考here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。