【问题标题】:Updating/Maintaining SQLite database after each App Release Xamarin Forms每次应用发布 Xamarin 表单后更新/维护 SQLite 数据库
【发布时间】:2021-02-16 15:17:35
【问题描述】:

这是我第一次开发 Xamarin 应用程序,我是应用程序开发领域的新手,所以我需要一些帮助来弄清楚这个过程。 目前我运行一个 php Web 服务,它生成一些我在 DB Browser 中运行的 SQL 文件,然后我得到一个数据库文件,然后我将其放入我的资产和资源文件夹中。使用每个平台的 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 文件夹中?有没有更自动化的过程?连同监控我的数据库的版本?

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

【问题讨论】:

    标签: android ios sqlite xamarin


    【解决方案1】:

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

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

    在 Xamarin Forms 中,我得到了这样的结果: https://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396

    这可能不是最好的策略,但似乎对我有用。

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

    参考here

    【讨论】:

    • 感谢您的回答。换句话说,可以说版本 2 出现在我生成了一个新的 db 文件,它的版本比我在我的应用程序中的版本更新。我可以在我的应用程序中更新我的本地表。嗯,如果我可以将新的 db 文件放在服务器中,并让我的应用程序检查版本,我认为这对我来说是可行的。但是,由于我将数据库本地存储在文件夹中。我怎样才能关闭那个新的数据库文件?或者您是否建议像其中包含数据的 JSON 字符串一样返回?
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2023-03-06
    相关资源
    最近更新 更多