FMDB1

作者: Rainqin | 来源:发表于2016-03-28 19:16 被阅读134次

    对sqlite的多线程访问数据安全等问题一直困惑不解,数据库是存放数据的地方,业务数据和基础数据有可能都会存放在同一个数据库中,数据库的多线程访问带来的数据安全问题主要体现在数据的错乱。

    所谓数据的错乱,指的就是读写顺序错误,造成本来应该读取A数据,结果读取的是B数据,在这中间已经发生了由A到B的数据转换,这个转换主要是由数据写入数据库造成的。

    在FMDB提供了一套解决这类问题的方案(ps可能不是最好的,但是至少可以解决这类小规模数据请求,小规模数据库的并发需求)

    且看FMDB的文件,如下如所示:

    copy1.png

    似曾相识,FMDatabase Represents a single SQLite database,

    FMResultSet Represents the results of executing a query on an FMDatabase(意思就是执行SQL语句后返回的结果集合)

    FMDatabaseQueue If you want to perform queries and updates on multiple threads, you'll want to use this class(看到没有,如果想要用FMDB制造多线程现象,就用这个QUEUE队列)

    FMDatabasePool A pool of FMDatabase objects(意思就是一个缓冲池)

    ok,我们来理一遍:

    FMDatabasePool的头文件有这么一句话:Before using FMDatabasePool, please consider using FMDatabaseQueue instead,意思是这两者都能达到多线程目的,只是建议使用FMDatabaseQueue(可能是这个更好点:),我们慢慢探究)。

    FMDatabasePool线程可以在inDatabase去运行,这个api有个说明就是block The code to be run on the FMDatabasePool pool,使用方式如下:

    FMDatabasePool *dbPool = [FMDatabasePool databasePoolWithPath:dbPath];

    FMDBQuickCheck([dbPool countOfOpenDatabases] == 0);

    __block FMDatabase *db1;

    [dbPool inDatabase:^(FMDatabase *db) {

    FMDBQuickCheck([dbPool countOfOpenDatabases] == 1);

    FMDBQuickCheck([db tableExists:@"t4"]);

    db1 = db;

    }];

    相关文章

      网友评论

          本文标题:FMDB1

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