SQLite 데이터베이스에 여러 번 액세스하는 응용 프로그램이 있습니다 .. 그러나 한 번 데이터베이스에 액세스하면 모든 후속 시도가 응용 프로그램을 중단시킵니다 ... I 'm 데이터베이스가 제대로 릴리스되지 않았기 때문에 확실하지 않은 경우 ...iOS : 여러 쿼리가 응용 프로그램을 충돌
예를 들어, 검색을 실행하여 테이블 뷰에 아티스트 이름을 채 웁니다. 일단 아티스트를 선택하면 새로운 테이블 뷰로 이동하여 아티스트의 작품으로 채울 수 있습니다.
하지만 여기에 문제가 있습니다. 데이터베이스에 액세스하여 첫 번째보기를 채우지 만 두 번째보기를 채우려는 경우 쿼리의 sqlite3_prepare_v2를 입력하지 않습니다 ... 따라서이 쿼리는 데이터베이스가 여전히 이전 쿼리에서 사용 중임을 나타냅니다.
그래서 사용 후 데이터베이스를 닫는 적절한 방법은 무엇입니까?
현재 나는 다음과 같은 쿼리를 수행
-(NSArray *)findAllArtists
{
NSMutableArray *returnArray = [[[NSMutableArray alloc] init] autorelease];
NSString *query = @"SELECT * FROM Painting GROUP BY Artist";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)
== SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *uniqueIdChars = (char *) sqlite3_column_text(statement, 0);
char *artistChars = (char *) sqlite3_column_text(statement, 1);
NSString *uniqueId = [[NSString alloc] initWithUTF8String:uniqueIdChars];
NSString *artist = [[NSString alloc] initWithUTF8String:artistChars];
PaintingInfo *info = [[PaintingInfo alloc] initWithUniqueId:uniqueId artist:artist];
[returnArray addObject:info];
[uniqueId release];
[artist release];
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return returnArray;
}
'findAllArtists' 메소드에서 닫는 데이터베이스 만 볼 수 있습니다 만, 포인터를 생성하는 곳은 어디입니까? '-findAllArtists'에서'sqlite3_close (database);를 제거하면 도움이 될까요? –