• FMDB使用的理解


    直接使用 FMDatabase(一个对象对应一个sqlite3*)对应第一种模式,自己持有并保证进行单线程操作

    使用FMDatabasePool对应第二种模式,保证不同线程使用同一个FMDatabasePool对象而使用不同的FMDatabase对象来进行数据库操作

    使用FMDatabaseQueue对应第三种模式,可以多线程访问,但是都是使用同一个FMDatabase对象,保证同时只有一个线程持有FMDatabase对象,排起队来一个一个访问操作

    简略的数据库操作代码:

    //打开数据库返回sqlite3*
    int err = sqlite3_open([self sqlitePath], (sqlite3**)&_db );
    int err = sqlite3_open_v2([self sqlitePath], (sqlite3**)&_db, flags, [vfsName UTF8String]);
    
    ///语法检查返回 sqlite3_stmt* (如果需要复用的话需要将对象重置sqlite3_reset(pStmt);)
    rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0);
    
    ///通过sqlite3_stmt*绑定条件赋值的参数数据
    NSString *parameterName = [[NSString alloc] initWithFormat:@":%@", dictionaryKey];
    int idx = sqlite3_bind_parameter_index(pStmt, [parameterName UTF8String]);
    sqlite3_bind_blob(pStmt, idx, bytes, (int)[obj length], SQLITE_STATIC);
    sqlite3_bind_text(pStmt, idx, [[self stringFromDate:obj] UTF8String], -1, SQLITE_STATIC);
    sqlite3_bind_double(pStmt, idx, [obj floatValue]);
    
    ///读取这条命令返回结果(对应update后续命令或next命令)
    rc      = sqlite3_step(pStmt);
    
    ///通过pStmt读取想要的数据
    const char *c = (const char *)sqlite3_column_text(pStmt, columnIdx);
  • 相关阅读:
    POJ 1095 Trees Made to Order 最详细的解题报告
    Producter and Consumer
    How to use the function of bind
    How to use the functions of apply and call
    Configurate vim tool
    #4713. 方程
    #4709. 树
    #4718. 管理
    #4710. 并
    #4707. 点分治
  • 原文地址:https://www.cnblogs.com/yuxiaoyiyou/p/12895300.html
Copyright © 2020-2023  润新知