2010-07-20 60 views
3

我在我的代碼下面的語句:sqlite3_open - 無法打開數據庫?

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 

,但它似乎並沒有被打開我的數據庫。

任何想法?

+1

什麼是「databasePath」的值,並在運行的iPhone-應用模擬器還是真實的設備?你能確保'databasePath'指向一個有效的父目錄的現有數據庫或空路徑嗎? – Akusete 2010-07-20 08:43:47

+0

databasePath具有以下詳細信息:/用戶/ stephenconnolly /庫/應用程序支持/ iPhone模擬器/ 3.1.3 /應用程序/ C42A3304-8A6E-45B5-9618-5BD6A1B05335/Documents。 此時應用程序正在模擬器上運行。 – Stephen 2010-07-20 08:56:07

+0

您的數據庫路徑是一個現有的目錄,請改爲在路徑中添加一個文件名。 – Akusete 2010-07-20 08:58:07

回答

5

如果您不瞭解您的問題,只能假定您的路徑無效。

嘗試使用此路徑,看看它的工作原理

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* documentsDirectory = [paths lastObject]; 
NSString* databasePath = [documentsDirectory stringByAppendingPathComponent:@"mydb.sqlite"]; 

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
    NSLog(@"Opened sqlite database at %@", databasePath); 
    //...stuff 
} else { 
    NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database)); 
    sqlite3_close (database); 
} 
+0

databasePath具有以下詳細信息:/ Users/stephenconnolly/Library/Application Support/iPhone Simulator/3.1.3/Applications/C42A3304-8A6E-45B5-9618-5BD6A1B05335/Documents – Stephen 2010-07-20 08:58:16

0

只需使用此文件路徑方法

- (NSString *) filePath 
{  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
    return basePath; 
}