美文网首页
FMDB、Realm、CoreData

FMDB、Realm、CoreData

作者: conowen | 来源:发表于2018-04-28 14:39 被阅读212次

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

    相关文章

      网友评论

          本文标题:FMDB、Realm、CoreData

          本文链接:https://www.haomeiwen.com/subject/vztglftx.html