iOS数据持久化的方式一般为:plist文件写入、对象归档、SQLite数据库、CoreData。

plist文件写入、对象归档一般用于小的数据量。

SQLite数据库、CoreData则用于大的数据量。

SQLite是一款轻型的数据库,是一种关系型数据库管理系统,他的设计目的是嵌入式设备中使用。

SQLite占用资源非常低,非常适合移动设备中使用,而且是开源免费的

SQLite的数据库操作其实和常规的数据库操作流程是一样的:

1.打开数据库 sqlite3_open()

2.准备SQL语句,采用参数绑定的方式防止SQL注入sqlite3_bind_text()绑定参数

3.编译SQL语句sqlite3_prepare_v2()

4,执行SQL语句sqlite3_exec()

5.语句完结sqlite3_finalize()

6.关闭数据库sqlite3_close()


CoreData 

CoreData不是数据库,而是使用数据库、XML、二进制文件等方式来存储数据的一个框架。

CoreData使用面向对象的方式操作数据,用来解决与对象生命周期管理、对象关系图管理合持久化等方面相关的问题。

CoreData避免了SQL的复杂性,能让我们以更加自然的方式与数据库进行交互。将数据库转换为OC对象(托管对象)来实现,这样无需要任何SQL知识就能操作他们。

优点:性能好,可以在Xcode上进行表的设计,或使用Instruments进行性能检测,省去了我们编码的精力,还有这比我们自己编码更好的代码质量。

特性:支持多类型外部存储、撤销/重做、KVC、复杂查询和对象映射、自动验证、并发/合并策略、数据迁移、内存策略,除此之外,还与UI展现良好结合.

结构:

NSManagedObject:模型对象,或者叫实体(entity),可以直接理解为一个OC对象

NSManagedObjectModel:模型文件(以.xcdatamodeld结尾的文件)。记录所有的模型对象(NSEntityDescription)以及对象里面的属性

NSPersistentStoreCoordinator:持久化存储协调员。和数据库打交道,用来执行具体的CRUD操作。

NSManagedObjectContext对象管理上下文。用户所有的持久化操作都是通过此对象。再由此对象去调用NSPersistentStoreCoordinator对象执行具体的操作。

对应关系:

表格结构 —> NSEntityDescription

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

数据库存放方式 —>NSPersistentStoreCoordinator

数据库操作 —>NSManagedObjectContext

查询语句 —>NSFetchRequest

表格的记录 —>NSManagedObject

步骤:

1.读取模板文件:NSManagedObjectModel 描述应用程序数据模型,可以包含多个数据模型对象

2.初始化NSPersistentStoreCoordinator 执行具体的持久化操作。这里将告知程序采用什么方式来存储数据。

3.初始化NSManagedObjectContext执行CURD操作。封装了数据库的各种办法

数据库事物机制

事物机制:单个逻辑工作单元执行的一系列操作称之为数据库事务,作用是同步发生数据更新时,防止数据不一致的情况。简单一点就是如果所有数据提交成功再把数据提交,否则就自动回滚数据,这种做法多用于银行。

事务的属性:原子性、一致性、隔离性、持久性

CoreData版本迁移:数据模型发生改变,我们可以通过数据模型版本变迁来达到目的。