SQLite(FMDB) 线程安全 - 多线程处理
来源:互联网 发布:php mysql pdf 编辑:程序博客网 时间:2024/05/06 19:23
http://www.saick.net/blog/2013/12/12/sqlite-xian-cheng-an-quan-duo-xian-cheng-chu-li/
在iOS开发中,经常用到SQLite,CoreData也不错,但很多时候还是自己写sql,使用FMDB来处理。当然了,也可以不用FMDB,直接写处理,这个不解释。
但是,我们在数据库操作的时候,经常遇到多线程访问数据库的状况,常见的有几种处理方法:
- 1, NSLock或类似方法加锁
- 2, FMDatabaseQueue
- 3, SQLITE_CONFIG_SERIALIZED
下面我们来仔细看一下出现的问题以及相关的解决方案
常见问题
以使用FMDB为例:
The debugger says that the error occurs at [FMResultSet next] at the line, has EXC_BAD_ACCESS
多线程访问的时候,会在这里报错。
如何解决呢?
1. NSLock加锁(NSMutex)
详见苹果官方文档: Threading Programming Guide
2. FMDatabaseQueue
这个是我在某项目中用到的,所有查询都走这里。 可能因为项目较复杂,用了这个还是会时候有问题,但稳定很多。可以有一些别的地方调用,没查清楚。
3. SQLITE_CONFIG_SERIALIZED
SQLite provides a much simpler serialization. By just setting the sqlite_config() option SQLITE_CONFIG_SERIALIZED you will probably avoid most of these kinds of headaches. I discovered this the hard way after fighting with threading issues for a long while.
参考: http://stackoverflow.com/questions/3144700/exc-bad-access-when-using-sqlite-fmdb-and-threads-on-ios-4-0
- SQLite(FMDB) 线程安全 - 多线程处理
- 【iOS开发-105】SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
- ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理
- ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理
- 多线程FMDB操作sqlite时候出现 EXC_BAD_ACCESS
- Sqlite线程安全
- FMDB的线程安全和事务
- Java多线程编程7--SimpleDateFormat非线程安全处理
- 多线程和线程安全
- PHP 线程安全,多线程
- 多线程:线程安全
- ios多线程 -- 线程安全
- 【多线程】线程安全初探
- Java多线程线程安全
- 多线程---线程安全
- FMDB多线程
- FMDB的使用,如何利用FMDatabaseQueue保证线程安全
- IOS:FMDB使用databaseQueue实现数据库操作线程安全
- 马走日,象走田;车走直路炮翻山
- OpenCV 2.4+ C++ 行人检测
- leetcode -day14 Populating Next Right Pointers in Each Node I II
- Shell continue循环
- JavaScript里面三个等号和两个等号的区别
- SQLite(FMDB) 线程安全 - 多线程处理
- libgdx 打飞机游戏 第三讲 实现计分类
- 认识 Build.prop
- At.js – 用于 Web 应用程序的自动完成库
- PHP数组操作汇总 php数组的使用技巧
- Java反射之Class类
- C#计时函数汇总
- Eclipse中Build Workspace 优化
- ipv6 全球单播地址,link-local address、site-local address、组播、任意波、EUI-64等地址的理解