2011-12-07 4 views
1

xcode 4.2 및 ios5 SDK에서 sqlite 데이터베이스를 사용하려고합니다. 아래 코드의 if 조건은 false를 반환하고 데이터베이스가 닫힙니다.xcode에서 sqlite 데이터베이스를 열 수 없습니다.

콘솔에 다음 메시지가 표시됩니다.

[71280:5303] Failed at Prepare Statement in NumberOfOrders. Reason out of memory 
2011-12-07 03:14:31.893 Database Closed 
2011-12-07 03:14:31.897 ### *** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty 
array 
2011-12-07 03:14:31.898 ### *** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty 
array 

친절히 도움.

//Open Database connection & assign to pointer dbInstance variable 
-(void) OpenDatabase { @try { 
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSLog(@"path is %@", path); 
NSString *documentDir = [path objectAtIndex:0]; 
NSLog(@"doc directory is %@", documentDir); 
NSString *dbPath = [documentDir stringByAppendingPathComponent: @"MAKitTutorials.sqlite"]; 
NSLog(@"dbPath is %@", dbPath); 

if (sqlite3_open_v2([dbPath UTF8String], &dbInstance, SQLITE_OPEN_NOMUTEX, NULL) == SQLITE_OK) { 
    NSLog(@"Database Open Succeeds"); 
} else { 
    sqlite3_close(dbInstance); 
} 
} @catch (NSException * e) { 
NSLog(@"Failed to open the database. Reason %@",[e reason]); 
} 
} 
//Close Database connection 
-(void) CloseDatabase { sqlite3_close(dbInstance); 
} 

답변

1

다른 플래그를 사용하려고하면 같은 문제가 발생합니다. SQLITE_OPEN_SHAREDCACHE. sqlite3_open()에 의해 사용 된 두 플래그를 명시 적으로 추가하여 해결 :
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE

그래서 귀하의 경우가 될 것 :

SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX. 
관련 문제