获得错误,因为在执行[FMDatabaseQueue inDatabase:]后至少有一个打开的结果集?

时间:2016-12-27 06:18:30

标签: ios multithreading sqlite fmdb

在我的应用中,有多个线程访问数据库。我使用过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 个答案:

答案 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;
}

感谢。