FMDB 多线程使用】的更多相关文章

现在ios里使用的数据库一般都是Sqlite,但是使用Sqlite有个不太好的地方就是在多线程的时候,会出现问题,sqlite只能打开一个读或者写连结.这样的话多线程就会碰到资源占用的问题. 最开始是使用FMDB,FMDB的早期版本不能解决这个问题,后来FMDB更新了,新版本的FMDB能够很好的解决这个多线程使用Sqlite . FMDB github网址  https://github.com/ccgus/fmdb 最新版的请到github取下载. 本文演示了使用FMDB通过多线程来读和写数据…
每日更新关注:http://weibo.com/hanjunqiang  新浪微博 今天终于解决了多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizing or resetting statement (5: database is locked) 最后通过FMDatabaseQueue解决了这个问题,本文总结一下: FMDatabase不能多线程使用同一个实例 多线程访问数据库,不能使用同一个FMDatabase的实例,否则会发生异常.如果线程…
今天最终攻克了多线程同一时候訪问数据库时,报数据库锁定的问题.错误信息是: Unknown error finalizing or resetting statement (5: database is locked) 最后通过FMDatabaseQueue攻克了这个问题.本文总结一下: FMDatabase不能多线程使用同一个实例 多线程訪问数据库,不能使用同一个FMDatabase的实例,否则会发生异常.假设线程使用单独的FMDatabase实例是同意的,可是相同有可能发生database…
原理:文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译sqlite可以修改超时时间),就报"database is locked"错误. 所以,在操作sqlite时,应该即时关闭连接:打开连接后,尽量减少非常费时的操作. 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizing or reset…
在App中保持一个FMDatabaseQueue的实例,并在所有的线程中都只使用这一个实例. [FMDatabaseQueue databaseQueueWithPath:path]; FMDatabaseQueue虽然看似一个队列,实际上它本身并不是,它通过内部创建一个Serial的dispatch_queue_t来处理通过inDatabase和inTransaction传入的Blocks,所以当我们在主线程(或者后台)调用inDatabase或者inTransaction时,代码实际上是同步…
http://blog.csdn.net/qq_29892943/article/details/50541439 首先,说一下事务是什么,比如说我们有一个学生表和一个学生成绩表,而且一个学生对应一个学生成绩.比如小明的成绩是100分,那么我们要写两个sql语句对不同的表进行插入数据.但是如果在这个过程中,小明这个学生成功的插入到数据库,而成绩插入时失败了,怎么办?这时事务就突出了它的作用.用事务可以对两个表进行同时插入,一旦一个表插入失败,那么就会进行事务回滚,就是让另一个表也不进行插入数据了…
最近面试被问到FMDB的多线程处理问题,因为之前项目中是移植别人的代码,没有踩过这里的坑. 问题: 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizing or resetting statement (5: database is locked) 原因: 文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编…
1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速度比 Mysql.PostgreSQL 这两款著名的数据库都要快.数据库的存储和 Excel 很像,以表(table)为单位.表由多个字段(列.属性.column)组成,表里面的每一行数据称为记录.数据库操作包含打开数据库.创建表,表的增.删.改.查. SQL(Structured Query La…
本文目录 1.SQLite 数据库 2.iOS 自带 SQLite 的使用 3.fmdb 的使用 4.fmdb 多线程操作 5.其他 SQLite 的第三方封装库 回到顶部 1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速度比 Mysql.PostgreSQL 这两款著名的数据库都要快.数据库的存储和 Excel 很像,以表(table)为单位.…
iOS中一些时间比较长的操作都应该放在子线程中,以避免UI的卡顿.而sqlite 是非线程安全的,故在多线程中不能共用同一个数据库连接,否则会导致EXC_BAD_ACCESS.所以我们可以在子线程中创建一个新的db连接(新建一个db对象),然后再操作数据库. 如果选择FMDB,除了以上所说的方式外,还可以利用FMDatabaseQueue来解决多线程问题. 关于FMDB的使用网上教程比较多,内容基本都是与唐巧的这篇http://www.devtang.com/blog/2012/04/22/us…