执行 [FMDatabaseQueue inDatabase:] 后出现错误,因为周围至少有一个打开的结果集?
Posted
技术标签:
【中文标题】执行 [FMDatabaseQueue inDatabase:] 后出现错误,因为周围至少有一个打开的结果集?【英文标题】:getting error as there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]? 【发布时间】:2016-12-27 06:18:30 【问题描述】:在我的应用程序中,有多个线程访问数据库。我使用了 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
而且我想我一旦完成就关闭集合。仍然,错误正在发生。 这仅发生在一张桌子上。在其他表中可以删除数据库中的数据。
提前致谢。
【问题讨论】:
【参考方案1】:我能够解决我的问题。我使用了错误的方法来删除数据。 我们需要使用“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;
谢谢。
【讨论】:
以上是关于执行 [FMDatabaseQueue inDatabase:] 后出现错误,因为周围至少有一个打开的结果集?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 的 FMDatabaseQueue (FMDB)
有两个日期字段(indate,outdate)。显示如2012-05-30 17:55:29。outdate与indate之差小于24小时。求SQL