FMDB 数据库线程安全

作者: 漂泊海上的大土豆 | 来源:发表于2017-05-26 16:48 被阅读196次

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]];
    }];

参考资料:

相关文章

  • 多线程理解及GCD的同步异步操作

    先说明今天的疑问在做FMDB的本地存储,查询了解到,FMDB在多线程访问数据库,针对线程安全上,使用过了FMDat...

  • FMDB

    为了多线程操作数据库安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很简单,...

  • iOS第三方库(4)

    数据库 • FMDB - sqlite的工具, 多线程FMDatabaseQueue实例,FMDB数据库的使用演示...

  • 数据库多线程问题

    1.FMDB线程安全的实现 应用中不可在多个线程中共同使用一个FMDatabase对象操作数据库,这样会引起数据库...

  • iOS开发 非常全的三方库、插件、大牛博客等等(六)

    数据库 FMDB- sqlite的工具,多线程FMDatabaseQueue实例,FMDB数据库的使用演示和封装工...

  • iOS开发常用之数据库、缓存处理

    数据库 FMDB - 多线程FMDatabaseQueue实例,FMDB数据库的使用演示和封装工具类,基于fmd...

  • FMDB 数据库线程安全

    FMDatabase 这个类是线程不安全的,如果在多个线程同时操作一个 FMDatabase 实例,会造成数据混乱...

  • GYDataCenter

    这是FMDB数据库的封装版本,具备内存缓存,自动创建及更新数据库表,线程安全,自动批量写入等特征,微信读书团队作品...

  • 几个小问题

    1、FMDB与多线程 SQLITE默认的线程模式是串行模式, 是线程安全的FMDatabase多线程不安全, 单个...

  • FMDB与多线程的研究

    前言SQLITE线程安全, 与FMDB多线程安全是两回事;SQLITE默认的线程模式是串行模式, 是线程安全的FM...

网友评论

    本文标题:FMDB 数据库线程安全

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