Невозможно открыть базу данных sqlite в xcode - PullRequest
1 голос
/ 07 декабря 2011

Я пытаюсь использовать базу данных sqlite в xcode 4.2 и ios5 sdk.Условие if в приведенном ниже коде возвращает false и база данных закрывается.

В консоли отображается следующее сообщение.

[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 Ответ

2 голосов
/ 26 января 2012

Я столкнулся с той же проблемой, когда попытался использовать другой флаг: SQLITE_OPEN_SHAREDCACHE. Решается путем явного добавления двух флагов, используемых sqlite3_open() call:
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE.

Так что в вашем случае это будет:

SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX.
...