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);

 

posted @ 2020-05-15 15:38  雨筱逸悠  阅读(632)  评论(0编辑  收藏  举报