2016-12-27 2 views
2

В моем приложении несколько потоков обращаются к базе данных. Я использовал SQLite-обертку FMDB.ошибка, так как после выполнения функции [FMDatabaseQueue inDatabase:] есть хотя бы один открытый результат.

Я слышал, что 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

Я могу решить свою проблему. Я использовал неправильный метод для удаления данных. Для удаления данных нам нужно использовать «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; 
} 

Спасибо.

Смежные вопросы