//
// ViewController.m
// FMDB的线程安全和事务
//
#import "ViewController.h"
#import "FMDB.h"
@interface ViewController ()
@property(nonatomic,strong)FMDatabaseQueue *queue;
- (IBAction)insert;
- (IBAction)query;
- (IBAction)update;
- (IBAction)delete;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//0.获得沙盒中的数据库文件名
//沙盒caches目录:NSCachesDirectory
//沙盒Document目录:NSDocumentDirectory
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
//1.创建数据库实例队列
self.queue = [FMDatabaseQueue databaseQueueWithPath:filename];
//2.建表
[self.queue inDatabase:^(FMDatabase *db) {
BOOL result = [db executeUpdate:@"create table if not exists t_student (id integer primary key autoincrement,name text,age integer);"];
if (result) {
NSLog(@"建表成功");
}else{
NSLog(@"建表失败");
}
}];
}
- (IBAction)insert {
[self.queue inDatabase:^(FMDatabase *db) {
for (int i=0; i<40; i++) {
NSString *name = [NSString stringWithFormat:@"rose--%d",arc4random() % 1000];
NSNumber *age = @(arc4random() % 100 + 1);
[db executeUpdate:@"insert into t_student (name,age) values (?,?);",name,age];
}
}];
}
- (IBAction)query {
[self.queue inDatabase:^(FMDatabase *db) {
//1.查询数据
FMResultSet *rs = [db executeQuery:@"select * from t_student where age>?;",@80];
//2.遍历结果集
while (rs.next) {
int ID = [rs intForColumn:@"id"];
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSLog(@"%d %@ %d",ID,name,age);
}
}];
}
- (IBAction)update {
[self.queue inDatabase:^(FMDatabase *db) {
//开启事务
// [db beginTransaction];
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
// if (发现情况不对) {
// //回滚事务
// [db rollback];
// }
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
//提交事务
// [db commit];
}];
}
- (IBAction)delete {
[self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
[db executeUpdate:@"update t_student set age=? where name=?;",@20,@"jack"];
// if (发现情况不对) {
// //回滚事务
// *rollback = YES;
// }
}];
}
@end
FMDB的线程安全和事务
最新推荐文章于 2019-01-28 15:56:50 发布