美文网首页
关于第三方库FMDB

关于第三方库FMDB

作者: 跬步千里_LenSky | 来源:发表于2017-09-15 09:23 被阅读32次

    //在官方文档中看到这样的一句话   学习学习

    //FMDB 文档地址

    Using a single instance of FMDatabase from multiple threads at once is a bad idea

    这句话的意思是:使用单利创建的FMDatabase 在多线程中使用是一个不好的选择或者说意见

    最后他说了不要在多线程中使用FMDatabase

    So don't instantiate a single FMDatabase object and use it across multiple threads.

    那么我们应该使用什么区处理一些线程安全的操作数据库呢?

    Instead, use FMDatabaseQueue. Instantiate a single FMDatabaseQueue and use it across multiple threads. The FMDatabaseQueue object will synchronize and coordinate access across the multiple threads. 

    相反使用 FMDatabaseQueue 初始化创建一个  FMDatabaseQueue 并且跨线程在多个想成中使用,FMDatabaseQueue 将同步协调 多个线程的访问;

    //最后一句我删掉了  说是 👇看看如何使用FMDatabaseQueue

    创建一个  FMDatabaseQueue 对象的方法

    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; 

    //使用方法是这样的

    [queue inDatabase:^(FMDatabase *db) {

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];

    FMResultSet *rs = [db executeQuery:@"select * from foo"];

    while ([rs next]) {

    }

    }];

    还有下面的一种操作方法 如果发生错误就会停止操作,并让已经操作的数据回滚到原值

    还有下面的一种操作方法 如果发生错误就会停止操作,并让已经操作的数据回滚到原值

    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];

    [db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];

    //如果出现什么不愉快的事情 将 回滚 (rollback)  指针 设置为 YES  就可以

    if (whoopsSomethingWrongHappened) {

    *rollback = YES;

    return;

    }

    // etc ...

    }];

    sql:select * from tablename order by filename1 desc;

    解释:上面语句的意思就是根据”filename1字段“排序,倒叙输出tablename表中的数据。 备注:asc是表示升序,desc表示降序。

    相关文章

      网友评论

          本文标题:关于第三方库FMDB

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