执行 [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)

FMDatabaseQueue 如何返回一个值

有两个日期字段(indate,outdate)。显示如2012-05-30 17:55:29。outdate与indate之差小于24小时。求SQL

FMDatabaseQueue 被称为可重入错误

_fmdatabaseQueue 可以从其他类访问吗

FMDatabaseQueue 没有在类 init() 中幸存