数据缓存

FMDB的基本使用

2016-09-18  本文已影响66人  lyonLiu

FMDB框架下载<= 点击左边下载FMDB框架.....(要使用一个框架之前肯定免不了先下载框架啦)

下载完毕后只需要将以下文件导入项目中

FMDB框架配置

1.导入libsqlite3.0.tbd

好了,废话不多说。直接上代码


创建一个FMDB工具类

#import <Foundation/Foundation.h>

@interface SQLiteTool : NSObject
// 单粒
+ (instancetype)shareInstance;

// 创建表
- (void)createTable;
// 插入数据
- (void)insertRecord;
// 执行多条语句
- (void)executeStaments;
// 查询所有数据
- (void)queryAll;
// 事件方法:将多条语句一起插入数据库,只要有一条不成功便全部插入不成功
- (void)transaction;

@end
#import "SQLiteTool.h"

@interface SQLiteTool ()

@property (nonatomic ,strong)FMDatabase *db;
@property (nonatomic ,strong)FMDatabaseQueue *dbQueue;

@end

@implementation SQLiteTool

static id shareInstance;

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shareInstance = [super allocWithZone:zone];
    });
    return shareInstance;
}

+ (instancetype)shareInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shareInstance = [[self alloc]init];
    });
    return shareInstance;
}

- (id)copyWithZone:(NSZone *)zone
{
    return shareInstance;
}

- (instancetype) init {
    if (self = [super init]) {
        
        // 创建一个数据库
        //_db = [FMDatabase databaseWithPath:@"/Users/zhongwangheyi/Desktop/db/demo.sqlite"];
        
        _dbQueue = [FMDatabaseQueue databaseQueueWithPath:@"/Users/zhongwangheyi/Desktop/db/demo.sqlite"];
        
        // 打开数据库
        if (_db.open) {
            NSLog(@"数据库打开成功");
        }else{
            NSLog(@"数据库打开失败");
        }
    }
    return self;
}

- (void)createTable
{
    NSString *sql = @"create table t_stu(id integer primary key autoincrement,name text not null,age integer,score real default 60)";
    
    BOOL result = [_db executeUpdate:sql values:nil error:nil];
    
    if (result) {
        NSLog(@"创建成功");
    }else{
        NSLog(@"创建失败");
    }
}

- (void)executeStaments
{
    NSString *sql = @"insert into t_stu(name,age,score) values('zhangsan2',162,882);
                      insert into t_stu(name,age,score) values('zhangsan1',161,881);";
    
    BOOL result = [_db executeStatements:sql];
    
    if (result) {
        NSLog(@"多条语句执行成功");
    }else{
        NSLog(@"执行失败");
    }
}

- (void)insertRecord
{
    NSString *sql = @"insert into t_stu(name,age,score) values('zhangsan',5,8)";
    // 
    [_dbQueue inDatabase:^(FMDatabase *db) {

        BOOL result = [db executeUpdate:sql values:nil error:nil];
        if (result) {
            NSLog(@"数据插入成功");
        }else{
            NSLog(@"数据插入失败");
        }
    }];
}

- (void)queryAll
{
    NSString *sql = @"select * from t_stu";
    
    FMResultSet *resultSet = [_db executeQuery:sql values :nil error:nil];
    
    while ([resultSet next]) {
        NSString *name = [resultSet stringForColumn:@"name"];
        NSInteger age = [resultSet intForColumn:@"age"];
        double score = [resultSet doubleForColumn:@"score"];
        NSLog(@"name = %@,age = %zd,score = %lf",name,age,score);
    }
}
- (void)transaction
{
    NSString *sql = @"insert into t_stu(name,age,score) values('lyon',0000,0000)";
    NSString *sql2 = @"insert into t_stu2(name,age,score) values('ios',51112,81112)";
    
    [_dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        
        BOOL result = [db executeUpdate:sql withArgumentsInArray:nil];
        BOOL result2 = [db  executeUpdate:sql2 withArgumentsInArray:nil];
        
        if (result && result2) {
            // 如果是,数据插入成功
        }else{
            // 如果不是,设置*rollback = YES,回滚至原始状态
            *rollback = YES;
        }
    }];
}

@end
上一篇 下一篇

猜你喜欢

热点阅读