在我的应用中,有多个线程访问数据库。我使用过SQLite包装器FMDB。
我听说FMDB让我通过FMdatabaseQueue处理多线程。
因此,我使用它如下:
@property (nonatomic, strong) FMDatabaseQueue *queue;
_queue = [[FMDatabaseQueue alloc] initWithPath:path];
- (BOOL)deleteSchoolDatabase:(NSString *)name anduserId:(NSString*)studentId {
__block BOOL success = NO;
[self.queue inDatabase:^(FMDatabase *db) {
NSString *deleteStudentDBString = [NSString stringWithFormat:@"DELETE FROM user WHERE name=%@ AND studentId=%@",name,studentId,nil];
success = [db executeQuery:deleteStudentDBString];
NSAssert((![db hadError]), [db lastErrorMessage]);
if ([db hadError]) {
DebugLog(@"Error : %@", [db lastErrorMessage]);
success = NO;
}
}];
return success;
}
我也使用了以上格式来获取,即
[self.queue inDatabase:^(FMDatabase *db) {
//fetch details
}];
但现在我收到了错误
Warning: there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]
query: 'DELETE FROM user WHERE name='abc' AND studentId='12346';'
我还查看了以下链接: https://groups.google.com/forum/#!topic/fmdb/oeu38he7UvQ
我认为我一旦完成就关闭了这套装置。仍然,错误正在发生。 这只发生在一张桌子上。在其他表中可以从数据库中删除数据。
提前致谢。
答案 0 :(得分:0)
我能够解决我的问题。我使用错误的方法删除数据。 我们需要使用“executeUpdate”来删除数据。 所以,请检查您的查询是否正确。
- (BOOL)deleteSchoolDatabase:(NSString *)name anduserId:(NSString*)studentId {
__block BOOL success = NO;
[self.queue inDatabase:^(FMDatabase *db) {
NSString *deleteStudentDBString = [NSString stringWithFormat:@"DELETE FROM user WHERE name=%@ AND studentId=%@",name,studentId,nil];
success = [db executeUpdate:deleteStudentDBString];
NSAssert((![db hadError]), [db lastErrorMessage]);
if ([db hadError]) {
DebugLog(@"Error : %@", [db lastErrorMessage]);
success = NO;
}
}];
return success;
}
感谢。