数据库CoreData 与 SQLite Persistent Objects 框架

1、Core Data框架管理应用程序数据模型

   Core Data提供对象的管理,使用Core Data,你可以创建模型对象,并管理这些对象。你管理这这些对象间的联系并修改数据。Core Data提供的内建SQLlite技术可以高效的管理数据。
    使用Core Data可以:

  • 在库里存储和接收对象
  • 提供基本的undo/redo,提供数据model结构变化轻量级的迁移方案。(例如版本升级迁移旧数据)
  • 自动验证属性值
  • 过滤、分组和优化内存中的数据
  • 用[NSFetchedResultsController]管理表视图中的结果
  • 支持基于文档的应用程序

2、Core Data与SQLite数据库


并非严格的说, CoreData是对SQLite数据库的一个封装。

在苹果iPhone或iPad上,你可以存放数据在以下三个地方

其一是:一个或多个文件

其二是:应用的属性列表(NSUserDefaults

其三是:内置的数据库(SQLite

通常SQLite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录,修改记录,表格之间也可以建立联系。

这个过程出现了, 表格的结构(schema), 所有表格的结构和相互联系构成整个数据库的模型, 数据库存放的方式(可以是文件或者在内存), 数据库操作,sql语句(主要是查询),表格里面的记录,下面将上面说的文字,跟CoreData的类作个对应:

SQLite数据库操作

VS

CoreData的类

表格结构

-->

NSEntityDescription

数据库中所有表格和他们的联系

-->

NSManagedObjectModel

数据库存放方式

-->

NSPersistentStoreCoordinator

数据库操作

-->

NSManagedObjectContext

查询语句

-->

NSFetchRequest

表格的记录

-->

NSManagedObject

可能上面的对应关系并非十分严格, 但确实可以帮助理解.

3、Core Data存储方式

Core Data可以将数据存储为XML,二进制文件或SQLite文件。在Mac OS X 10.5 Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式。每种方法都有其优缺点,例如XML的可读性,SQLite的节约空间等。

Core Data的这一方面类似于原始的Enterprise Objects Framework(EOF)系统,但EOF中开发者可以使用相对简洁的查询方式,而在Core Data中,只能使用一个语法类似SQL子集的查询语言,称为Predicate。Core Data是标准化的,可以自由的读写Xcode数据模型文件(通常是.xcdatamodel文件)。

与EOF不同,Core Data目前没有设计多用户或多线程访问模式。模型迁移通常也需要代码,若其它开发者依赖于某个数据模型,则该数据模型的设计者可能在模型发生改变时需要与新数据模型一起提供版本转换代码。

 数据库CoreData 与 SQLite Persistent Objects 框架_第1张图片


4、SQLite Persistent Objects简化你的数据持久化工作

在使用前,我们先了解一下他是怎么工作的,首先要创建一个Objective-C类,这个类只需要继承自“SQLitePersistentObject”,然后,添加您想要持久化的Objective-C 2.0属性。当这个类被实例化后,调用”save”方法,会自动保存到数据库中。每一个“SQLitePersistentObject”的子类都会拥有数据库中对应的一张表。每一个属性(不包括集合类型,像,NSDictionary,NSArray,NSSet或这些类的可变类型)都会持久化到表中相应字段中。属性中如果含有指针对象是”SQLitePersistentObject”实例,也将会在关联表里新添条记录。注意,这里的属性必须是实现“NSCoding”的对象,如NSDate,NSString,NSData,NSMutableData,NSNumber与NSObject,而c-string,void pointer, strutct 或 union它们不是对象,将不会支持。但所有的数字(int,float等)都会保存在应的字段上。

我们简单要来做一个例子,定义一个类Person,继承SQLitePersistentObject,把这个类的属性保存到数据库中,代码如下:

    #import 
    #import “SQLitePersistentObject.h” 
    //Person.m的生成略,大家都应该知道的 
    @interface Person : SQLitePersistentObject { 
    NSString *iName; 
    int iAge; 
    } 
    @property (nonatomic, retain) NSString * iName; 
    @property (nonatomic) int iAge; 
    @end 
生成类文件后,在其它使用的类中创建实例:
    Person *person = [[Person alloc] init]; 
    person.iName = @”leeguoli”; 
    person.iAge = 20; 

调用”save”方法,保存到数据库中:

[person save]; 

加载表中的数据也相当的简单。任何一个”Person”类都有多个提供查询的类方法。例如,你可以查询所有姓“lee”的人:

    NSArray *people = [Person findByIName:@"'lee%'"];//这里实际有点像like语句,where iName like 'lee%' 

或者更灵活的使用SQL查询条件:

    Person *leeguoli = [Person findFirstByCriteria:@"WHERE i_name = 'leeguoli' AND i_age = 20]; 
注意大写字母区分的情况用下划线代替(ActiveRecord的惯例)。”findByCriteria:”返回一个NSArray数组,”findFirstByCriteria:”返回一个对象。

如果要更新,当然这里先要查询出来需要更新的对象,然后修改对象的值并保存就可以了,这里不再详写。



你可能感兴趣的:(数据库CoreData 与 SQLite Persistent Objects 框架)