我读到我应该在这个路径中找到我的 sqlite 数据库:
~/库/应用程序支持/iPhone模拟器/您的IOS版本/应用程序/您的应用程序的唯一 key /文档
但是该文件夹是空的。当我在模拟器中运行我的应用程序时,我可以查询数据库。 该数据库最初位于我的应用程序的资源文件夹中。
我正在使用 xcode 3.2.6 和 OS X 10.6.8
还有其他地方可以找到吗?
非常感谢。 拉波
-(void)insertError:(Frage *) f
answer2:(NSString *) answer2
answer3:(NSString *) answer3
{
int resconn = sqlite3_open([pathDB UTF8String], &database);
if (resconn == SQLITE_OK) {
NSString * sql = @"Insert into errors (id, answer2,answer3) values (?,?,?)";
const char * sqlStatement = [sql UTF8String];
sqlite3_stmt * compiledStatement;
if (sqlite3_prepare_v2(database, sqlStatement, -1 , &compiledStatement, NULL) == SQLITE_OK) {
sqlite3_bind_text(compiledStatement, 1, [f.id UTF8String], -1 , SQLITE_TRANSIENT);
sqlite3_bind_int(compiledStatement, 2, [answer2 intValue]);
sqlite3_bind_int(compiledStatement, 3, [answer3 intValue]);
}
if (!sqlite3_step(compiledStatement) == SQLITE_DONE) {
//
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
最佳答案
为了访问应用程序文档文件夹中的资源数据库,您首先需要在应用程序启动时将其复制到那里。
如果数据库文件位于 xcode 项目的 resources 文件夹中,则不会自动将其复制到应用程序的文档目录中。
为此,您可以使用:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSError *error;
NSString *databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_DB_IN_RESOURCES"];
[[NSFileManager defaultManager] copyItemAtPath:databasePath
toPath:[NSString stringWithFormat:@"%@/%@",documentsDirectory,@"YOUR_DB"]
error:&error];
然后,您将能够使用现有代码访问文档文件夹中的数据库([pathDB UTF8String]
应指向文档目录而不是资源)。
正如您所提到的,您仍然可以使用资源中的数据库,但每次重新启动应用程序时它都会被删除。诀窍是将数据库复制到您的文档文件夹中,它将保留在该文件夹中,直到从设备中手动删除应用程序为止(在应用程序更新期间也会保留文档文件夹,因此当用户更新应用程序时您的数据库仍然存在)。
希望这有帮助:)
关于iphone - 模拟器中的文档文件夹为空。我的 db.sqlite 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715865/