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版本迁移:数据模型发生改变,我们可以通过数据模型版本变迁来达到目的。