每次更新应用程序时是否需要创建新的SQLite数据库?

Ala*_*an2 21 sqlite xamarin.ios xamarin.android xamarin

我有一个我想开发的Xamarin Forms应用程序.它将有一个SQLite数据库,我希望在iOS和Android上提供它.数据库将使用来自云上的SQL Server数据库的数据填充初始种子数据.我想这将是大约500行数据,每行大约1Kb.

我不明白的是何时以及如何填充这个.我是否应该尝试将数据放入CSV文件并在安装应用程序或首次启动时填充数据库?除了使用大量插入语句填充代码中的行之外,填充种子数据的常规方法是什么.

关于如何正常完成的任何帮助或建议(我认为大多数人都以同样的方式完成)将不胜感激.

谢谢

Sus*_*ver 12

让我们打破这个问题.

您希望在应用中使用的初始数据是否会随时间发生变化?

如果您包含任何预先填充的数据(SQLite,Realm或基于CSV的文件,...),并且您所包含的数据过时并且您必须定期更新它,则需要发布应用程序更新(.apk/ .ipa)以便您的新用户安装接收更新的数据(更多内容见下文).

注意:这假设您当前的用户通过实际运行您的应用程序获取更新的数据,它正在例行处理本地数据更新(后台服务,推送通知,数据轮询等).

这是通过Ad-Hoc,私人商店和/或iOS企业发布发布的Business of Business(LoB)应用程序吗?

如果您控制用户群,则必须强制进行更新安装,以便您的用户获得新的/更新的预先填充数据可能是一种可接受的方法,但如果他们不得不一直更新应用程序,那么用户体验就不是很好.但它有效......

此应用程序是通过公共Apple和Google App Stores分发的吗?

在这里,您需要非常小心应用程序中包含的预填充数据.

如果数据过时并且您需要将更新的应用程序版本推送到商店以进行新的安装安装,请注意可能需要几天(或几周甚至一个月+)才能将新应用程序添加到商店中.

Play商店发布应用更新时通常不到24小时,虽然Apple Store可以相同,但不要赌它.

我们经常看到48-72小时的延迟并随机被拒绝,因此可能需要一周或更长时间才能将更新应用程序带入Apple Store.我们拒绝推迟应用更新超过一个月,并已进入申诉流程,甚至已删除现有功能以重新发布

注意:Apple商店的每个应用更新都会重置您的用户评论... :-(

结论:您希望在修复和/或添加功能时发布到商店,而不是更新存储在应用包中的某些"静态"数据...

这些数据对您的最终用户和您的成本有何影响?

作为应用程序开发人员,您的负面成本是糟糕的评论和卸载.看看这个"数据"如何影响最终用户访问您的应用程序以及它们的反应方式.下载时间较长,通常可以接受.更长的初始应用启动时间,不太可接受......等等....

您的应用将在哪些市场中使用?全球许多市场的网络速度和数据传输成本都很慢且成本高昂......

真正的数据大小究竟是什么?

我在一秒钟内"预填充"具有数千行和5MB JSON数据的Realm数据实例.SQLite需要更长时间,但它仍然不错.数据本身以zip格式存储并作为静态文件(基于https的get)访问,并且在80%压缩因子下,使用LTE蜂窝数据在1秒内从服务器(AWS S3)提取1MB压缩数据加速并将其解压缩为流,同时在运行时反序列化JSON以更新Realm实例再添加一个......

因此,用户影响非常小,我通过首次欢迎屏幕和用户希望在进入第一个"真实"应用屏幕之前阅读的一些文本"隐藏"此初始预填充更新...

注意:这确实假设用户在第一次打开应用程序时将拥有网络数据访问权限......在世界各地的许多市场中,情况并非如此,因此请将此考虑到您的应用程序设计中.

我还构建了应用程序,因此它的数据可以在启动期间在后台线程上更新(最初的一个或者不是),因此用户不会站在那里观看旋转繁忙的指示器,他们至少可以与他们拥有的数据进行交互.

那么您应该在应用包中包含任何预先填充的数据吗?

当然,当数据绝对需要让用户尽快启动并运行以增强用户体验时.游戏就是一个很好的例子,通过.obb...将各种级别,媒体文件等捆绑到100兆字节甚至千兆字节到应用程序中,这样用户就不会经历10+分钟.第一次打开应用程序时等待时间.

现在这意味着他们的初始安装下载时间更长,因为数据捆绑在应用程序中,整体用户体验更好,因为用户接受下载/安装时间并将其视为运营商/电话/服务计划问题vs .第一次打开你的应用程序实际进入功能屏幕的时间.

那又怎么样?

我个人会根据具体情况来看这个问题.我查看数据,如果它不会改变并且只是被添加到并且可能随着时间的推移被修剪,请将其包含为预先填充的SQLite或Realm存储或...为什么导致用户等待Web请求,数据库更新以及额外的网络数据使用和相关成本.如果数据过时,请不要将其捆绑在您的应用中.

至于安装预填充数据的机制:

请参阅我对这个问题的答案" Bundle prebuilt Realm files "


Abd*_*ban 6

每次更新应用程序时都不必创建sqlite数据库.实际上SQLiteOpenHelper提供了以下两种方法:

  1. OnCreate():您应该实现此方法并使用服务器中的填充数据创建sqlite数据库.当您第一次启动应用程序时调用它.
  2. OnUpgrade():如果要修改数据库(在表中添加新表或列)或填充其他数据,则应实现此方法.

数据库在应用程序更新之间保留,您不需要每次都创建它.

请查看以下示例,这些示例说明了如何在Xamarin中使用sqlite数据库:

在使用Visual Studio开发的Xamarin.Android应用程序中使用Sqlite

Xamarin.Forms和SQLite简介