当前位置:Gxlcms > 数据库问题 > SQLite和CoreData数据库的比较

SQLite和CoreData数据库的比较

时间:2021-07-01 10:21:17 帮助过:2人阅读

  • 这些操作都需要使用SQL语句去实现,感觉操作很直接。如果先前有一点数据库和SQL基础的话,写起来会感觉很亲切,都是一些数据库操作的语句。但是当操作变多之后,语句越来越多,就很烦,代码比较多,看起来也会混乱一些。

  • 如果想要详细了解,可以看iOS学习36数据处理之SQLite数据库
  • 2. CoreData数据库

    • CoreData.framework :iOS中提供了对原始SQLite数据库API访问的封装,通过这个framework来管理数据缓存和持久数据要比使用SQL语句操作SQLite数据库简单和方便许多。

    • 机制:通过framework来存储和查询数据只需要使用framework提供的类就可以,你可以完全使用对象的形式来管理你的数据以及数据之间的关系,framework已经很好地将数据库表和字段封装成了对象和属性,表之间的一对多、多对多关系则封装成了对象之间的包含关系.

    • 通过 relationship 来表示:

      一对多时:设置为 properties 项选中 Optional, Plural 选项 To-Many Relationship 选中;

      多对一反向关系时:properties 项选中 Optional, Count 项选中Minimun 和 Maximun 并分别设置其值为1;

      如果想要详细了解,可以看iOS学习37数据处理之CoreData

    3. 比较

     1> CoreData的类与SQLite数据库中的文字描述做一个对应:

      NSEntityDescription --> 表格结构
      NSManagedObjectModel --> 数据库中所有表格和他们的联系
      NSPersistentStoreCoordinator --> 数据库存放方式
      NSManagedObjectContext --> 数据库操作
      NSFetchRequest --> 查询语句
      NSManagedObject --> 表格的记录

     2> 下面我们可以详细的看看CoreData的类 

    • NSEntityDescription、NSManagedObjectModel

       NSEntityDescription 用来定义表格结构, 所以你就可以理解 NSManagedObjectModel 中的 setEntities:(NSArray *)entities 函数大概有什么用了 . 通常, 定义 model , 是用文件 CoreData.xcda*****odel , 可以图形化的操作. 这类似用nib来创建界面.

    • NSPersistentStoreCoordinator

       这个类的对象通常用 NSManagedObjectModel 的对象来初始化, 这个类抽象出不同的存放方式, 最经常用的是 NSSQLiteStoreType.

    • NSManagedObjectContext

       这个类的对象又用 NSPersistentStoreCoordinator 的对象来初始化, 它里面有些方法来添加, 删除 NSManagedObject

    • NSFetchRequest

       通常用 NSEntityDescription 来构造查询, 也就指定查询那个表格, 另外可以指定排序.

    •  NSFetchedResultsController

      NSFetchedResultsController 只是又封了一下, 和 NSFetchRequest 合起来使用, 方便取数据, 另外和 NSManagedObjectContext 关联, 当数据库发生变化的时候收到通知.

     3> 特点比较

    • CoreData的强大之处就在于这种关系可以在一个对象更新时,其关联的对象也会随着更新,相当于你更新一张表的时候,其关联的其他表也会随着更新。

    • Core Data的另外一个特点就是提供了更简单的性能管理机制,例如,使用NSFetchedResultsController类,你不用使用SQL的Limit而是使用NSFetchRequest类的setFetchBatchSize()就可以限制查询记录的总数,而NSFetchedResultsController类神奇的地方在于需要获取更多记录的时候,这个类会自动更新其缓存。

    • 对于多表查询上相对来说,CoreData 没有 SQL 直观,但 CoreData 的功能还是可以完成相关操作的,但是对于类似外连接,左连接等操作,在CoreData中就显得无力。

     

    SQLite和CoreData数据库的比较

    标签:

    人气教程排行