在设备中运行时找不到Sqlite数据库

时间:2011-09-13 13:50:09

标签: iphone objective-c xcode

在我的应用程序中,我使用的是sqlite数据库。当我在iphone模拟器中运行它时工作正常。但它无法将数据库与设备连接。该数据库的路径是:

 /Users/taxsmart7/Library/Application Support/iPhone Simulator/4.3/Applications/A644750D- 5175-4FF1-BDA7-6EDF65895180/Documents/BillSplitter.sqlite

当我连接我的设备时,数据库显示为空白。

2 个答案:

答案 0 :(得分:1)

这是正常的,这是在模拟器上运行时数据库的路径,换句话说:在你的mac上。在设备上运行时,应用程序的路径以及整个“文件系统”层次结构完全不同 您不应该在应用程序中使用任何绝对路径,并且只能从应用程序根文件夹中使用,例如: /private/var/mobile/Applications/A644750D-5175-4FF1-BDA7-6EDF65895180/

因此,如果您想在应用程序中使用数据库,则必须将其复制到捆绑包中并找到正确的路径,或者在设备上进行切换时创建一个数据库。

HTH

编辑:上面的路径方案可能有误,我怀疑它只是保留给应用程序的“Documents”文件夹的路径。无论如何,我的建议保持不变:使用相对的路径。

答案 1 :(得分:1)

如果您只需要阅读sqlite3数据库,那么在app bundle中使用数据库是有意义的 您打开数据库,例如:

NSString *pathname = [[NSBundle mainBundle] pathForResource:@"nameOfYourDatabase" ofType:@"sqlite3"]; // extension could not be .sqlite3!!! Have a look on your db file.
sqlite3 *database;
int res = sqlite3_open_v2([pathname UTF8String], &database, SQLITE_OPEN_READONLY, NULL);
if (res != SQLITE_OK) {
    NSLog(@"Error opening database %@", pathname);
    sqlite3_close(database);
}

如果您需要在首次运行应用程序时写入数据库,则需要将数据库文件从app bundle复制到app documents目录中,然后打开数据库以进行读写访问。