本文共 3154 字,大约阅读时间需要 10 分钟。
#import <Foundation/Foundation.h> #import "Student.h" @interface StudentManager : NSObject + (instancetype)sharedManager; - (BOOL)add:(Student *)student; - (BOOL)delete:(Student *)student; - (BOOL)update:(Student *)student; - (NSMutableArray *)selectAll;@end
#import "StudentManager.h"
#import "FMDatabase.h" @implementation StudentManager { FMDatabase *_dataBase; // FMDB对象,这个对象负责数据库操作,它关联了我们的数据库文件 } + (instancetype)sharedManager { static StudentManager *manager = nil; @synchronized(self) { if (manager == nil) { manager = [[StudentManager alloc] init]; } } return manager; } - (id)init { if (self = [super init]) { // 配置数据库 // 1. 获取沙盒路径,因为数据库文件要存储在沙盒中 NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 找到沙盒下面的Docuemnts文件夹路径,相当于 [NSHomeDirectory() stringByAppendingPathComponents:@"Document"] // 2. 在沙盒中指定数据库文件路径 NSString *dbPath = [documentPath stringByAppendingPathComponent:@"DBDemo.db"]; // 3. 新建FMDB对象并调用initWithPath关联数据库文件 _dataBase = [[FMDatabase alloc] initWithPath:dbPath]; // 4. 打开数据库创建表格 // 打开数据库文件,如果这个文件(dbPath)原来是存在的, 则直接打开,不会破坏原来的内容 // 如果不存在,则自动创建一个空的数据库文件 if ([_dataBase open]) { NSString *sql = @"create table if not exists student(id varchar(128), name text, age integer, headImage blob)"; // blob:存放二进制,data if ([_dataBase executeUpdate:sql]) { NSLog(@"成功创建表格 student"); } } [_dataBase close]; } return self; } - (BOOL)add:(Student *)student { if (![_dataBase open]) { return NO; } NSString *sql = @"insert into student values(?,?,?,?)"; // ?占位,?表示的对象要等下填充,特别注意,在FMDB里面,要用对象填充,所以如果要填充整型,就必湏用包装器NSNumber包装成对象 // 执行sql语句 BOOL success = [_dataBase executeUpdate:sql, student.id, student.name, [NSNumber numberWithInt:student.age], UIImageJPEGRepresentation(student.headImage, 1.0)]; if (success) { NSLog(@"成功插入一条数据"); } [_dataBase close]; return success; } - (BOOL)delete:(Student *)student { return [self deleteById:student.id]; } - (BOOL)deleteById:(NSString *)studentId { if ([_dataBase open] == NO) { return NO; } NSString *sql = @"delete from student where id=?"; BOOL success = [_dataBase executeUpdate:sql, studentId]; [_dataBase close]; return success; } - (BOOL)update:(Student *)student { // 根据id更新 if ([_dataBase open] == NO) { return NO; } NSString *sql = @"update student set name=?, age=?, headImage=? where id=?"; BOOL success = [_dataBase executeUpdate:sql, student.name, [NSNumber numberWithInt:student.age], UIImageJPEGRepresentation(student.headImage, 1.0), student.id]; [_dataBase close]; return success; } - (NSMutableArray *)selectAll { if ([_dataBase open] == NO) { return nil; } NSString *sql = @"select * from student"; FMResultSet *set = [_dataBase executeQuery:sql]; NSMutableArray *array = [NSMutableArray array]; while ([set next]) { Student *student = [[Student alloc] init]; // [set stringForColumn:@"xxx"] 根据域名xxx取相应的数据 student.id = [set stringForColumn:@"id"]; student.name = [set stringForColumn:@"name"]; student.age = [set intForColumn:@"age"]; // [set intForColumnIndex:3]; student.headImage = [UIImage imageWithData:[set dataForColumn:@"headImage"]]; [array addObject:student]; } [_dataBase close]; return array; } @end转载地址:http://gcsni.baihongyu.com/