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

    对sqlite的多线程访问数据安全等问题一直困惑不解,数据库是存放数据的地方,业务数据和基础数据有可能都会存放在同...

  • # iOS面试题

    1、fmdb1>有三个主要的类1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLit...

网友评论

      本文标题:FMDB1

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