2010-07-20 61 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; 
}