android - sqlite 替换表 iOS 和 Android
问题描述
我目前在 iOS 和 Android 的应用程序中都使用 sqlite 数据库。我目前不希望为这个应用程序使用 CoreData 或 JSON,因为它与 sqlite 数据库完美配合。
但是,我想在下次更新时更新数据库中的一个表。
我认为这将是许多人会做的事情,但有趣的是,我尝试寻找答案但没有得到任何结果。
所以我的问题有两个:1)是否可以替换sqlite数据库中的表?2)如果是这样,一个人如何做到这一点?
我没有代码可以分享,因为我什至无法确定如何开始。提前致谢
解决方案
1) 是否可以替换 sqlite 数据库中的表?
是的。
2)如果是这样,一个人如何做到这一点?
您利用一种检测是否需要更改(升级)的方法。
在 Android 上,如果使用SQLiteOpenHelper的子类,则增加版本号(超级调用的第 4 个参数),在这种情况下,onUpgrade方法运行,因此您覆盖onUpgrade方法来处理对表的更新。
这利用了存储在数据库标头中的user_version字段。简而言之,SQliteOpenHelper 在打开数据库时会将标头中的值与作为第四个参数传递的值进行比较。如果传递的值大于标头值,则调用 onUpgrade。如果值相同,则不会进行此类调用。如果传递的值低于标头中的值,则调用 onDownGrade,除非编码导致异常。(通常不使用 onDowngrade)
在 IOS 上,您可以复制这种比较存储在 user_version 中的值的方法,该值通过PRAGMA user_version =
PRAGMA user_version
提取和设置?在适用时(即未存储在数据库中)的值相对于指示较新版本的值。这不是唯一的解决方案
上面的链接有一个简短的描述,其中包括一个与 SQLite 的ALTER TABLE相关的链接,它本身解释了ALTER TABLE命令的局限性,并有一个部分涵盖了替代解决方案。这将适用于 IOS 和 Android。
推荐阅读
- event-flow - Microsoft.Diagnostics.EventFlow with Inputs.EventSource
- gpu - 计算机的哪个组件执行游戏的源代码?(cpu 或 gpu)
- python - Matplotlib:条形顶部的线条,左侧的图例,没有样条线
- cross-platform - 为什么 libzmq 上的 ldd 命令不显示 libsodium 依赖项?
- arrays - 使用dataweave重命名和删除同一数组中的属性
- request - OData 请求/响应的 _metadata 节点中的属性 id 和 uri 之间的区别?
- javascript - 我正在尝试使用基础实例化地图,但它会引发错误?
- java - 引诱:如果子步骤失败,如何使父步骤失败?
- java - 使用java插入表时出现SQl错误
- php - 使用 Stichoza laravel 包和 antonioribeiro 包从 laravel 的下拉列表中根据所选国家/地区翻译网站文本