2016-12-27 14 views
2

私のアプリでは、データベースにアクセスする複数のスレッドがあります。私はSQLiteラッパーのFMDBを使用しました。[FMDatabaseQueue inDatabase:]の実行後に少なくとも1つのオープン結果が設定されているため、エラーが発生していますか?

FMDBが私にFMDBatabaseQueue経由のマルチスレッド処理を提供してくれると聞きました。

@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

私は私の問題を解決することができます。私は間違った方法でデータを削除していました。 データを削除するには "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; 
} 

ありがとう。

関連する問題