【发布时间】:2011-10-27 22:43:08
【问题描述】:
我是 Core Data 的新手,遇到了一个问题。
我有一个文件“db.sqlite”,它有 3 个表,每个表包含大约 10k 条记录。
现在我的问题是我可以将此文件添加到我的项目中并使用 CoreData API 访问(选择/更新)数据。
提前谢谢您。
【问题讨论】:
我是 Core Data 的新手,遇到了一个问题。
我有一个文件“db.sqlite”,它有 3 个表,每个表包含大约 10k 条记录。
现在我的问题是我可以将此文件添加到我的项目中并使用 CoreData API 访问(选择/更新)数据。
提前谢谢您。
【问题讨论】:
您不能使用 Core Data 读取任意 SQL 文件。您也不能可靠地将任意 SQL 文件转换为 Core Data 可以使用的 SQL 文件。 Core Data 的 sqlite 模式没有记录并且不断变化。 Core Data 只会读取和写入其模式,并且每个 sqlite 存储文件都必须配置为特定的数据模型文件。为 Core Data 直接创建 SQL 存储始终是一个脆弱的解决方案。
了解Core Data 不是SQL 很重要。实体不是表格。对象不是行。属性不是列。关系不是连接。 Core Data 是一个对象图管理系统,它可能会也可能不会持久化对象图,并且可能会或可能不会在幕后使用 SQL 来做到这一点。试图用 SQL 术语来思考 Core Data 会导致您完全误解 Core Data 并导致很多痛苦和浪费时间。
作为Mundi pointed out,您需要使用标准 SQL C API 读取现有 SQL 文件,然后将该数据加载到托管对象中,并让 Core Data 将对象保存到其 SQL 存储中。听起来可能需要做很多额外的工作,但实际上您正在从仅关注磁盘上和磁盘外数据的有限 SQL API 转换为为您的应用程序提供完整数据模型的 Core Data API。
【讨论】:
Core Data API 实际上隐藏了所谓的持久存储的机制。它更像是一个对象建模 API,可以非常有效地持久化数据。它也可以使用不同于 sqlite 的数据库。
因此,如果您想使用 Core Data,我建议您首先导入所有记录,然后使用 Core Data 创建一个新的数据库文件。您可以使用 SQLite API 读取现有数据库并使用 Core Data API 将新的面向对象数据写入新数据库。
一旦您的所有原始数据都在 Core Data 中,您就应该坚持下去。
【讨论】:
.xcdatamodel 生成。你不能用它来读取任意的 sql 文件。这不是 Core Data 的用途。