设为首页 加入收藏

TOP

【原】iOS学习47之第三方-FMDB(三)
2017-10-13 10:28:29 】 浏览:10092
Tags:iOS 学习 第三方 -FMDB
h];
// 第四步:数据库执行相关的操作 // 需要判断数据库打开的时候才进行执行语句 if (self.database.open) { BOOL result = [self.database executeUpdate:createSql]; if (result) { NSLog(@"创表成功"); } else { NSLog(@"创表失败"); } } // 第五步:关闭数据库 [self.database close]; } #pragma mark - 插入 - (IBAction)insertIntoAction:(id)sender { // 第一步:打开数据库 [self.database open]; // 第二步:进行相关的操作 NSArray *nameArray = @[@"MBBoy", @"BoomSky", @"小明"]; for (NSString *name in nameArray) { BOOL result = [self.database executeUpdate:@"insert into t_student(name, age, sax) values(?, ?, ?)", name, @69, @""]; // integer的数据不能在这里使用,必须使用一个对象型数据,比如NSNumber、NSString... [self.database executeUpdate:@"INSERT INTO t_student(name, age, sax) VALUES (?, ?, ?);" withArgumentsInArray:@[@"xiaoming", @12, @""]]; if (result) { NSLog(@"插入成功"); } else { NSLog(@"插入失败"); } } [self.database close];// 更新数据// 删除数据// 增加(插入)数据 } #pragma mark - 更新 - (IBAction)updateAction:(id)sender { [self.database open]; BOOL result = [self.database executeUpdate:@"update t_student set name = ? where name = ?", @"xiaoming", @"小明"]; if (result) { NSLog(@"更新成功"); } else { NSLog(@"更新失败"); } [self.database close]; } #pragma mark - 删除 - (IBAction)deleteAction:(id)sender { [self.database open]; BOOL result = [self.database executeUpdate:@"delete from t_student where name = ?", @"MBBoy"]; if (result) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } [self.database close]; } #pragma mark - 查询 - (IBAction)selectAction:(id)sender { [self.database open]; // 查询结果使用的类FMResultSet FMResultSet *resultSet = [self.database executeQuery:@"select * from t_student"]; // 遍历出需要的结果内容 while (resultSet.next) { NSInteger ID = [resultSet intForColumn:@"id"]; NSString *name = [resultSet objectForColumnName:@"name"]; NSInteger age = [resultSet intForColumn:@"age"]; NSString *sax = [resultSet objectForColumnName:@"sax"]; NSLog(@"id = %ld name = %@, age = %ld, sax = %@", ID, name, age, sax); } [self.database close]; } @end

4. FMDB实现多线程操作

 1> 概述

  • 如果应用中使用了多线程操作数据库,那么就需要使用 FMDatabaseQueue 来保证线程安全了。 应用中不可在多个线程中共同使用一个 FMDatabase 对象操作数据库,这样会引起数据库数据混乱(例如使用两个线程同时对数据库进行更新和查找)。

  • 多个线程更新相同的资源导致数据竞争时使用等待队列(等待现在执行的处理结束)。

  • 队列的形式添加是 FMDB 比较常用的添加方式

  • FMDB 不支持多个线程同时操作,一般使用串行方式实现相关的操作。

 2> 创建操作队列

  使用的初始化方法

+ (instancetype)databaseQueueWithPath:(NSString*)aPath

 3> 把操作打包放在操作队列中

  打包的方法

- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block

  在 Block 中添加串行队列

 4> 实例代码

#pragma mark - 以队列的形式添加很多学生
- (IBAction)insertManyStudent:(id)sender
{
    // 以队列的形式添加学生是FMDB比较常用的添加方式
    // FMDB不支持多个线程同时操作,一般使用串行方式实现相关的操作
    
    [self.database open];
    
    // 第一步:创建操作队列
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath];
    
    // 标识:记录是否操作成功
    __block BOOL isSucceed = YES;
    
    // 第二步:把操作打包放在操作队列中
    NSString *insertSql = @"insert into t_studen(name, age, sax) values(?, ?, ?)";
    
    [queue inTransaction:^(FMDatabase *db, BOOL *
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS原生CIFilter创建二维码 下一篇改变设置文本框占位文字和图片

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目