来自iOS中Bundle Resources的Sqlite3

时间:2014-04-23 06:32:09

标签: ios sqlite resources nsbundle

您好我打算从我的项目资源文件夹中添加一个静态SQLite3,但我不知道我是否正确执行。

到目前为止,这是我的进步...... 从SQLite Database Browser

创建SQLite3数据库

将Sqlite3数据库复制到我的项目文件夹 enter image description here

将network.db添加到我的项目资源文件夹中 enter image description here

现在我不知道接下来要去哪里..我希望有人可以帮我解决我的问题。

3 个答案:

答案 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