生成单例包含查询和操作(添加,删除,修改)
@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