IOS 数据库底层封装和Block回调

生成单例包含查询和操作(添加,删除,修改)

@interface DataBaseModel()
{
    dispatch_queue_t serialqueue;
}
@property(nonatomic)sqlite3 *database;
@property(nonatomic,strong)NSString *dataPath;
@end
@implementation DataBaseModel
static NSString *myPath;

static DataBaseModel *s_instance;
-(instancetype)init{
    NSArray *array=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path=[array objectAtIndex:0];
    path=[path stringByAppendingPathComponent:@"xixi_db.sqlite"];
    self.dataPath = path;
    serialqueue = dispatch_queue_create("seral", DISPATCH_QUEUE_SERIAL);
    int result=sqlite3_open([_dataPath UTF8String],&_database);
    if (result == SQLITE_OK) {
//        DLog(@"打开数据库");
    }else{
//        DLog(@"打开数据库失败");
    }
    return self;
}
+(instancetype)sharedinstance{
    @synchronized (self) {
        if (!s_instance) {
            s_instance = [[DataBaseModel alloc]init];
        }
    }
    return s_instance;
}
//查询
-(void)searchDataFromExeSql:(NSString *)exesql DataHandle:(void (^)(sqlite3_stmt *))datahandle IoCompleteHandle:(void (^)(BOOL))completeIoHandle{

    dispatch_async(serialqueue, ^{
            //打开数据库成功
            sqlite3_stmt *stmt = nil;
            int result = sqlite3_prepare_v2(_database, [exesql UTF8String], -1, &stmt, NULL);
            if (result == SQLITE_OK) {
                while (sqlite3_step(stmt)==SQLITE_ROW) {
                        datahandle(stmt);
                }
                completeIoHandle(YES);
                sqlite3_finalize(stmt);
            }else{
                completeIoHandle(NO);
                sqlite3_finalize(stmt);
            }
    });
}
//执行sql
-(void)exeSql:(NSString *)sql completeHandle:(void(^)(BOOL isExeOk))complete{
    dispatch_async(serialqueue, ^{
        char *error;
        int  result1 = sqlite3_exec(_database, sql.UTF8String, NULL, NULL, &error);
        if (result1==SQLITE_OK) {
            complete(YES);
        }else{
            complete(NO);
//            DLog(@"操作失败%s",error);
        }
    });
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值