SQLite&FMDB

作者: 起个名字想破头 | 来源:发表于2017-05-08 15:52 被阅读41次

    简介

    sqlite是开发中常用的一种轻便型数据库, iOS中通常使用FMDB来操作sqlite,FMDB是目前iOS开发中最好的第三方库,github链接:https://github.com/ccgus/fmdb

    FMDB的使用

    FMDB的集成不再赘述,下面直接通过举例方式简述FMDB的使用方法

    创建数据库

    这里我使用的是可以保证线程安全的FMDatabaseQueue类,在单例方法的初始化中,加入如下方法:

    //设置数据库路径
    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];
    
    //创建并打开数据库
    staticInstance->_dbQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
    

    建表

        [self.dbQueue inDatabase:^(FMDatabase *db) {
          [db executeStatements:@"CREATE TABLE IF NOT EXISTS testTB (id integer PRIMARY KEY AUTOINCREMENT, a text, b text, c integer)"];
        }];
    

    插入

    [self.dbQueue inDatabase:^(FMDatabase *db) {
    //当表中字段特别多时,可以采用字典方式插入
    //对于自增量的主键,插入时直接赋值为NULL即可
            [db executeUpdate:@"insert into testTB values (:id, :a, :b, :c)" 
        withParameterDictionary:@{@"id":[NSNull null], @"a":@"avalue", @"b":@"bvalue", @"c":@6}];
        }];
    
    

    FAQ:

    1.sqlite数据库的后缀名,db和sqlite有区别么?
    答:木有!后缀只是为了方便一些工具识别数据库文件,从而可以双击打开,对于sqlite数据库,常用的后缀有:db,sqlite,sqlite3

    2.executeStatementsexecuteUpdate的区别
    答:这两个方法都可以执行增删改操作,实现上分别调用的是sqlite3_execsqlite_step ,所以这个问题主要是sqlite3_execsqlite_step区别。
    对于sqlite3_exec,本质上是对 sqlite3_prepare_v2(), sqlite3_step(), sqlite3_finalize()的封装。sqlite3_exec适用sql语句比较简单的情况。简单来说,sqlite3_exec只能传入一个字符串,然后回调结果,如果像创建数据库这种可以写到一个字符串中的sql语句,用exec是很方便的。但是如果要插入blob数据,或者sql语句中需要用到INSERT INTO myTable VALUES (?, ?, ?, ?)这种方式,就需要用sqlite_step方式了。
    不过,我们在使用FMDB第三方库时,可以直接使用executeUpdate方法,库本身已经给我们封装的很好了。
    ps:sqlite3_execsqlite_step本身可能存在效率问题,待验证http://blog.csdn.net/zongshiwujie/article/details/7394101

    相关文章

      网友评论

        本文标题:SQLite&FMDB

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