如何在使用 sqlite 的 ios 应用程序中使用“已提交”隔离级别?

Posted

技术标签:

【中文标题】如何在使用 sqlite 的 ios 应用程序中使用“已提交”隔离级别?【英文标题】:How can I use "read commited" isolation level in ios app using sqlite? 【发布时间】:2014-09-16 12:52:40 【问题描述】:

我的 ios 应用程序使用 FMDB 框架来处理 SQLite 数据库。为了从服务器更新数据库,我使用 FMDatabaseQueue:

- (BOOL)executeUpdate:(NSString *)update

    FMDatabaseQueue *dbQueue = [FMDatabaseQueue databaseQueueWithPath:databasePath];
    __block BOOL success = NO;
    [dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) 
        success = [db executeUpdate: update];
    ];
    return success;

这种方法允许我使用多个线程来处理数据库。但是查询将按照收到的顺序执行。当我更新数据库中的大块数据时,其他查询(比如为 UI 线程获取一些数据)必须等待太久。 有没有办法让其他查询在更新过程中读取提交的数据?(如 JDBC 隔离级别 TRANSACTION_READ_COMMITTED)

【问题讨论】:

你读过this吗? 是的,我读过这个,但我找不到如何使用 FMDB 设置 PRAGMA 好的,所以这个问题应该改写一下。 【参考方案1】:

降低隔离级别仅适用于共享缓存模式,这在移动设备上没有意义。

要增加并发性,即允许读取者和写入者同时访问数据库,请启用WAL mode。

【讨论】:

以上是关于如何在使用 sqlite 的 ios 应用程序中使用“已提交”隔离级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使定位更准确?

如何在 iOS 应用中使滚动视图高度动态化?

如何在 Swift iOS 中使 web 视图不可点击

如何在ios objective-c 应用程序中使屏幕的全部内容滚动

如何通过 iOS 在应用程序购买中使非消耗性产品可用于多次购买?

如何在 iOS 6 GM 中的标签栏应用程序中使旋转正常工作?