美文网首页
关于第三方库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