FMDB 数据库线程安全

FMDatabase 这个类是线程不安全的,如果在多个线程同时操作一个 FMDatabase 实例,会造成数据混乱问题
FMDatabaseQueue 是线程安全的,FMDatabaseQueue 类的操作很多都和 FMDatabase 相似

1.创建

FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

2.普通使用

[queue inDatabase:^(FMDatabase*db) {
    //FMDatabase数据库操作
}];

3.事务使用

数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
要么完整的执行,要么就回滚。
这还是很重要的,想象一下你进行一个更新300条数据的操作,一半正确一半错误怎么办,我们期望的是全部成功才真的修改。

SQLite使用事务的语句

只要在执行SQL语句前加上以下的SQL语句,就可以使用事务功能了:
开启事务的SQL语句,"begin transaction;"
进行提交的SQL语句,"commit transaction;"// 提交才会生效
进行回滚的SQL语句,"rollback transaction;"

FMDatabase 相似的使用方法

[self.database beginTransaction]; 
[self.database commit]; 
[self.database rollback]; 

FMDatabaseQueue使用事务的方法 rollback 最后为 YES 就会回滚,十分方便的封装

    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];

        if (whoopsSomethingWrongHappened) {
            *rollback = YES;
            return;
        }
        // etc…
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    }];

参考资料:

  • iOS学习笔记17-FMDB你好! -
  • FMDatabaseQueue Class Reference
  • FMDB多线程安全问题
  • 在iOS开发中使用FMDB | 唐巧的博客
  • SQLite 事务 | 菜鸟教程
  • 使用FMDB | JEEK WONG

你可能感兴趣的:(FMDB 数据库线程安全)