【iOS】数据库FMDB的使用(二)
2015-12-24 11:22
302 查看
上一篇《【iOS】数据库FMDB的使用(一)》中介绍了FMDB的基本使用。但是在项目一般一个数据库会在多个地方操作,为了避免冲突就需要多线程。FMDB也帮我们封装了多线程的方法。
上一篇《【iOS】数据库FMDB的使用(一)》中说了需要导入多少个文件到项目中。但是没有导入FMDB.h这个文件,因为这个文件里面就是包含了几个头文件。
两篇博客代码的下载地址:请点击我。
多线程的时候我们需要导入蓝色的这个文件,但是为了方便我们直接导入FMDB.h这个文件,这个就帮我在使用FMDB是需要的头文件都包含进来了。
多线程的操作和分多线程的操作点不一样。
最后上结果图:
上一篇《【iOS】数据库FMDB的使用(一)》中说了需要导入多少个文件到项目中。但是没有导入FMDB.h这个文件,因为这个文件里面就是包含了几个头文件。
两篇博客代码的下载地址:请点击我。
多线程的时候我们需要导入蓝色的这个文件,但是为了方便我们直接导入FMDB.h这个文件,这个就帮我在使用FMDB是需要的头文件都包含进来了。
多线程的操作和分多线程的操作点不一样。
[self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; // 这里做操作 } [db close]; }];都在在一个block里面操作。下面早就直接贴代码了。代码结果和上一篇的基本一致。
#import "QueueViewController.h" #import "FMDB.h" #import "Student.h" @interface QueueViewController () @property (nonatomic,strong)FMDatabaseQueue *fmdbQueue; @property (nonatomic,strong)FMDatabase *dataBase; @property (nonatomic,strong)NSArray *nameArray; @end @implementation QueueViewController - (void)viewDidLoad { [super viewDidLoad]; self.nameArray = @[@"①",@"②",@"③",@"④",@"⑤",@"⑥"]; [self initDataBase]; [self creatTabel]; // Do any additional setup after loading the view from its nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /** * 新建一个数据库 */ - (void)initDataBase{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [paths objectAtIndex:0]; NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Student1.db"]; NSLog(@"dbPath = %@",dbPath); self.fmdbQueue = [[FMDatabaseQueue alloc] initWithPath:dbPath]; self.dataBase = [[FMDatabase alloc] initWithPath:dbPath]; } /** * 数据库中新建一个表 */ - (void)creatTabel{ [self.dataBase open]; [self.dataBase executeUpdate:@"CREATE TABLE IF NOT EXISTS Student24 (rowid INTEGER PRIMARY KEY AUTOINCREMENT, name text,age text,address text)"]; [self.dataBase close]; } /** * 以学生模型插入数据库 * * @param student 学生数据模型 */ - (void)insterStudent:(Student *)student{ [self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; [db executeUpdate:@"INSERT INTO Student24 (name,age,address) VALUES (?,?,?)",student.name,student.age,student.address]; [db close]; }]; } /** * 更新一个学生的数据 * * @param student 学生数据模型 */ - (void)updateStudent:(Student *)student{ [self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; [db executeUpdate:@"UPDATE Student24 SET age= ? WHERE name = ?",student.age, student.name]; [db close]; }]; } /** * 删除数据库里面 一类名字的学生数据 * * @param student 学生模型 */ - (void)deleteStudent:(Student *)student{ [self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; [db executeUpdate:@"DELETE FROM Student24 WHERE name = ?",student.name]; [db close]; }]; } /** * 获取表中的所有数据 以学生模型的形式存储在数组中 * * @return 表中的数据 */ - (NSMutableArray *)getAllStudent{ NSMutableArray *stuArray = [[NSMutableArray alloc] init]; [self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; FMResultSet *result = [db executeQuery:@"SELECT * FROM Student24"]; while ([result next]) { Student *model = [Student creatStudent:[result stringForColumn:@"name"] age:[result stringForColumn:@"age"] address:[result stringForColumn:@"address"]]; [stuArray addObject:model]; } [db close]; }]; return stuArray; } /** * 根据姓名 查找学生 * * @param name name * * @return 名字为name的学生数组 */ - (NSMutableArray *)getStudents:(NSString *)name{ NSMutableArray *stuArray = [[NSMutableArray alloc] init]; [self.fmdbQueue inDatabase:^(FMDatabase *db) { [db open]; FMResultSet *result = [db executeQuery:@"SELECT * FROM Student24 WHERE name = ?",name]; while ([result next]) { Student *model = [Student creatStudent:[result stringForColumn:@"name"] age:[result stringForColumn:@"age"] address:[result stringForColumn:@"address"]]; [stuArray addObject:model]; } [db close]; }]; return stuArray; } /** * 随机生成一个学生数据模型 * * @return 学生数据模型 */ - (Student *)getStudent{ Student *student = [Student creatStudent:self.nameArray[arc4random()%6] age:[NSString stringWithFormat:@"%u",arc4random()%100] address:[NSString stringWithFormat:@"%u",arc4random()%1000]]; return student; } /** * 往数据库增加一条数据 * * @param sender sender description */ - (IBAction)insterBtn:(UIButton *)sender { Student *stu = [self getStudent]; [self insterStudent:stu]; } /** * 从数据库删除数据 * * @param sender sender description */ - (IBAction)deleteBtn:(UIButton *)sender { [self deleteStudent:[Student creatStudent:@"②" age:nil address:nil]]; } /** * 更新数据 * * @param sender sender description */ - (IBAction)updateBtn:(UIButton *)sender { [self updateStudent:[Student creatStudent:@"④" age:@"1" address:@"0"]]; } /** * 获取数据库里面的全部数据 * * @param sender sender description */ - (IBAction)getAll:(UIButton *)sender { NSMutableArray *temp = (NSMutableArray *)[self getAllStudent]; [temp enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { Student *student = (Student *)obj; NSLog(@"查找全部: name = %@ age = %@",student.name,student.age); }]; } /** * 数去数据里的一类数据 * * @param sender sender description */ - (IBAction)getType:(UIButton *)sender { NSMutableArray *temp = (NSMutableArray *)[self getStudents:@"③"]; [temp enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { Student *student = (Student *)obj; NSLog(@"查找姓三的: name = %@ age = %@",student.name,student.age); }]; }
最后上结果图:
相关文章推荐
- MySql 数据库将中文填入时字段时显示?号
- oracle自治事务
- oracle基础知识
- 在windows Server 2008 R2上安装oracle 12C 出现的问题以及解决方法
- MFC中用ADO连接数据库
- sql case when
- Redis 的性能幻想与残酷现实
- SqlServer创建加密视
- 数据库schema设计与优化
- MySql错误代码1045的解决方案
- mysql相关命令的作用总结
- PostgreSQL数据库压力测试工具pgbench简单应用
- Oracle trunc()函数的用法
- MySQL的备份与过滤
- mysql 中的information_schema是什么
- Oracle基础
- win10下安装MySQL启动失败
- ubuntu下搭建配置nodejs+mongodb环境
- Mysql 设置某字段唯一
- [PL/SQL] 请教大家一个问题,存储过程中需要几个commit?