2011-12-07 13 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_SHAREDCACHEsqlite3_open()で使用される2つのフラグを明示的に追加することで解決します。
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE

だからあなたの場合にはあることになるだろう:

SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX. 
関連する問題