天天看點

iOS 存儲之FMDB

1.在Github上下載下傳FMDB,導入fmdb,删除裡面的plist檔案

2.導入庫libsqlite3.tbd

3.包含頭檔案#import “FMDB.h”

寫一個資料庫工具類,包含資料的增删改查

另寫一個模型類,存放要存入資料庫的資料模型

4.下面貼出我的資料庫工具類

#import "DBManager.h"
#import "FMDB.h"

@implementation DBManager{
    FMDatabase *db;
    NSString *path;
}
+ (DBManager *)shareManager{
    static DBManager *dB = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (dB == nil) {
            dB = [[DBManager alloc] init];
        }
    });
    return dB;
}

- (id)init{
    self = [super init];
    if (self) {
        NSString *dbPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/appa.db"];
        NSLog(@"列印資料庫路徑:%@",dbPath);
        path = dbPath;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if (![fileManager fileExistsAtPath:path]){
            db = [[FMDatabase alloc] initWithPath:path];
            if ([db open]) {
                NSLog(@"打開資料庫成功");
                NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student (sid text unique NOT NULL, name text NOT NULL, age text NOT NULL)";
                BOOL isSuccess = [db executeUpdate:sql];
                if (isSuccess) {
                    NSLog(@"建立表成功");
                }else{
                    NSLog(@"建立表失敗");
                }
                [db close];
            }else{
                NSLog(@"請打開資料庫");
            }
        }
    }
    return self;
}

#pragma mark - 資料庫操作
//查詢
- (BOOL)isExistsDataWithModel:(Student *)model{
    db = [FMDatabase databaseWithPath:path];
    NSMutableArray *array = [NSMutableArray array];
    if ([db open]){
        NSString *sql = @"select sid from t_student where sid = ?";
        FMResultSet *set = [db executeQuery:sql,model.sid];
        while ([set next]) {
            [array addObject:model.sid];
        }
        [db close];
    }
    return array.count>?YES:NO;
}

//插入
- (void)insertDataWithModel:(Student *)model{
    db = [FMDatabase databaseWithPath:path];
    if ([db open]){
        NSString *sql = @"insert into t_student (sid,name,age) values (?,?,?)";
        BOOL isSuccess = [db executeUpdate:sql,model.sid,model.name,model.age,nil];
        if (isSuccess) {
            NSLog(@"插入成功");
        }else{
            NSLog(@"插入失敗");
        }
        [db close];
    }
}
//删除
- (BOOL)deleteDataWithModel:(Student *)model{
    db = [FMDatabase databaseWithPath:path];
    if ([db open]){
        NSString *sql = @"delete from t_student where sid = ?";
        BOOL isSuccess = [db executeUpdate:sql,model.sid];
        if (isSuccess) {
            NSLog(@"删除成功");
        }else{
            NSLog(@"删除失敗");
        }
        [db close];
    }
    return YES;
}
//修改
- (BOOL)changeDataWithModel:(Student *)model newStr:(NSString *)str{

    db = [FMDatabase databaseWithPath:path];
    if ([db open]){
        NSString *sql = @"update t_student set name = ? where name = ?";
        BOOL isSuccess = [db executeUpdate:sql,str,model.name];
        if (isSuccess) {
            NSLog(@"修改成功");
        }else{
            NSLog(@"修改失敗");
        }
        [db close];
    }
    return YES;
}
//傳回所有資料
- (NSArray *)allData{
    //裝資料模型
    NSMutableArray *array = [NSMutableArray array];
    db = [FMDatabase databaseWithPath:path];
    if ([db open]){
        NSString *sql = @"select * from t_student";
        FMResultSet *res = [db executeQuery:sql];
        while ([res next]) {
            Student *model = [[Student alloc] init];
            model.sid = [res stringForColumn:@"sid"];
            model.name = [res stringForColumn:@"name"];
            model.age = [res stringForColumn:@"age"];
            [array addObject:model];
        }
        [db close];
    }
    return array;
}