有什么方法可以直接从iphone sdk中的bundle路径访问sqlite db?

时间:2011-11-26 06:41:39

标签: iphone objective-c database ipad sqlite

是否可以直接从bundle路径访问sqlite db或者将sqlite db从bundle复制到documentary路径然后访问sqlite db? 哪种方法有效?任何人都可以就此提出建议吗?

3 个答案:

答案 0 :(得分:1)

您无法更改捆绑包中的文件。如果需要更改数据库,则需要将其复制到Documents目录中。但是如果没有更改数据库,您可以将其保存在捆绑包中。但人们通常会在Documents目录中创建数据库副本。

更改数据库=操纵数据库记录。

答案 1 :(得分:0)

最好将数据库复制到库或文档目录,并从文档或库文件夹中的本地保存的数据库中进行所有处理。

我更喜欢将它保存到库文件夹,以便用户无法打开和删除它,只是为了安全起见。 如果您从主软件包访问数据库,则可能会出现问题,如果您升级应用程序版本并希望对数据库进行更改,则会出现问题。

因此,更好的选择是将数据库保存到文档或库文件夹并从那里访问它。

希望它有道理。

答案 2 :(得分:0)

如果要直接从文档目录访问或读取数据库数据,

  1. 您必须以编程方式将数据库复制到文档目录,然后您可以使用以下代码访问数据库(选择,更新,删除操作)。

    NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES) objectAtIndex:0];
    
    NSString* foofile = [documentsPath stringByAppendingPathComponent:@"XYZ.sqlite"];
    
    
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];
    
    if(fileExists)
    {
     if (foofile)
     {
       myText = [[NSString alloc] initWithContentsOfFile:foofile];    
       if (myText)
       {
        [self start];
       }
       else{;}      
     }
    }
    else
    {
      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"XYZ" 
                                                           ofType:@"sqlite"];
      if (filePath)
      {  
       myText = [[NSString alloc] initWithContentsOfFile:filePath];    
       if (myText)
       {
          [self start];
       }
       else
       {;}      
      }
     }