您好我打算从我的项目资源文件夹中添加一个静态SQLite3,但我不知道我是否正确执行。
到目前为止,这是我的进步...... 从SQLite Database Browser
创建SQLite3数据库将Sqlite3数据库复制到我的项目文件夹
将network.db添加到我的项目资源文件夹中
现在我不知道接下来要去哪里..我希望有人可以帮我解决我的问题。
答案 0 :(得分:3)
如果要在运行时修改数据库(即插入,删除或更新记录),则需要从bundle到documents目录创建一个副本。 iOS sendboxing机制不允许您在运行时修改bundle资源。因此,您需要将其复制到文档目录。下面的代码可以帮助您:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *filePath = [documentsDir stringByAppendingPathComponent:@"network.db"];
BOOL success = [fileManager fileExistsAtPath:filePath];
if(!success)
{
NSString *defaultDBPath = [[[NSBundle mainBundle] pathForResource:@"network" ofType:@"db"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:filePath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable resource file with message '%@'.", [error localizedDescription]);
}
如果您仅将数据库用于查找目的(仅将其用于选择查询),则无需从包中复制到文档目录。
答案 1 :(得分:1)
您需要将该项目文件添加到文档目录
中你可以这样做,
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *sourcePath = [[[NSBundle mainBundle] bundlePath]stringByAppendingPathComponent:@"networks.db"];
NSError *error;
[[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:documentsDirectory error:&error];
然后,如果您想对SQLite3文件执行任何操作,可以使用任何SQLite管理器,例如SQLite Manager
答案 2 :(得分:1)
查看我对此link的回答。
这将是copy your database into document directory file from your bundle
。然后您可以使用此数据库并插入,更新,删除您的数据。有关详细信息,请Sample Code