FMDB、Realm、CoreData
SQLite
SQ为Structured Query (结构化查询)的缩写,Lite表示轻量级。SQLite是一款开源的关系型数据库。几乎可以支持所有现代编程语言和各种操作系统,SQLite的最新版本为SQLite 3。
对SQLite数据库的操作一般包括:创建一个数据库,打开数据库,关闭数据库,删除数据库。
FMDB
在Android里面,可以通过继承自带的SQLiteOpenHelper类来管理SQLite数据库。而在iOS开发中,自带的API接口就没有这么方便,使用原生的接口操作SQLite并不是非常方便。第三方框架FMDB对SQLite进行封装,使得方便使用之外也增加了线程安全的处理。
需要关注的是FMDB在线程安全方面的问题,如果涉及多线程操作,应当使用FMDatabaseQueue
,而FMDatabase
是线程不安全的。
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"fmdb.sqlite"];
//创建数据库
self.db=[FMDatabase databaseWithPath:filePath];
//打开数据库
if ([self.db open]) {
NSLog(@"打开数据库成功");
//创建表格
//除了select是executeQuery,所有的操作都是executeUpdate
BOOL createTableResult=[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS student (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer)"];
if (createTableResult) {
NSLog(@"创建表成功");
}else{
NSLog(@"创建表失败");
}
}else{
NSLog(@"打开数据库失败");
}
}
- (IBAction)insert:(id)sender {
[self.db executeUpdate:@"INSERT INTO t_student(name,age) VALUES(?,?)",@"Jack",[NSNumber numberWithInteger:18]];
}
- (IBAction)delete:(id)sender {
[self.db executeUpdate:@"DELETE FROM student WHERE id=?",@1];
}
- (IBAction)update:(id)sender {
[self.db executeUpdate:@"UPDATE student SET name='Jack' WHERE id=?",@2];
}
- (IBAction)select:(id)sender {
FMResultSet *rs=[self.db executeQuery:@"SELECT * FROM student WHERE age>?",@10];
while ([rs next]) {
int ID=[rs intForColumn:@"id"];
NSString *NAME=[rs stringForColumn:@"name"];
int AGE=[rs intForColumn:@"age"];
NSLog(@"%d %@ %d",ID,NAME,AGE);
}
}
Realm
Realm是一个专门针对移动平台设计的数据库,也就是说,它支持java,iOS,Mac等平台。Realm并不是基于Core Data,也不是基于 SQLite 所构建 ORM 的,它拥有自己的数据库存储引擎,可以高效且快速地完成数据库的构建操作,核心引擎已经开源。
不是基于SQLite的话,也就是说,不用在写繁杂的SQL语言来实现数据库的增删改查了。
CoreData
CoreData是iOS原生基于SQLite封装的一套数据库接口,CoreData提供数据--OC对象映射关系来实现数据与对象管理,类似FMDB,只不过CoreData更加抽象,无需使用者使用SQL语言进行增删改查。它允许按照实体-属性-值模型组织数据,并以XML、⼆进制文件或者SQLite数据⽂件进行存储。
以下是CoreData几个重要的对象
NSManagedObjectContext(数据上下文)
对象管理上下文,负责插入数据,查询数据,删除数据,更新数据
NSPersistentStoreCoordinator(持久化存储助理)
数据库的连接器,设置数据存储的名字,位置,存储方式,和存储时机
NSManagedObjectModel(数据模型)
数据库所有表格或数据结构,包含各实体的定义信息