FMDB、Realm、CoreData

2018-04-28  本文已影响212人  conowen

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(数据模型)
数据库所有表格或数据结构,包含各实体的定义信息

上一篇下一篇

猜你喜欢

热点阅读