您的位置:首页 > 数据库

【iOS】数据库FMDB的使用(二)

2015-12-24 11:22 302 查看
上一篇《【iOS】数据库FMDB的使用(一)》中介绍了FMDB的基本使用。但是在项目一般一个数据库会在多个地方操作,为了避免冲突就需要多线程。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);
}];
}


最后上结果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: