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