【问题标题】:What are the methods access sqlite db directly from bundle path in iphone sdk?直接从 iphone sdk 中的捆绑路径访问 sqlite db 的方法是什么?
【发布时间】:2012-01-06 18:54:43
【问题描述】:

可以直接从bundle路径访问sqlite db还是从bundle复制sqlite db到documentary路径然后访问sqlite db? 哪种方法有效?谁能给我建议?

【问题讨论】:

  • 我不想更改数据库中的记录。我只想从数据库中读取数据。那么我是否需要将数据库从捆绑包复制到文档目录?我可以根据需要直接打开捆绑包中的数据库吗?

标签: iphone objective-c database ipad sqlite


【解决方案1】:

您不能更改捆绑包中的文件。如果需要更改数据库,则需要将其复制到 Documents 目录中。但如果数据库没有被更改,您可以将其捆绑在一起。但人们在 Documents 目录中创建数据库副本是惯例。

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

【讨论】:

  • 谢谢 Himanshu :) 我不想更改数据库中的记录。我只想从数据库中读取数据。那么我是否需要将数据库从捆绑包复制到文档目录?我可以根据需要直接打开捆绑包中的数据库吗?
  • 据我所知,它会增加通信开销,因为它必须面对一些内部操作系统 api 调用。但要回答您的问题,您可以根据需要直接打开 bundle 中的数据库。
【解决方案2】:

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

为了安全起见,我更喜欢将它保存在库文件夹中,这样用户就无法打开和删除它。 如果您从主包访问数据库,您可能会遇到问题,如果您升级应用程序版本并想要更改您的数据库。

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

希望它有一些意义。

【讨论】:

    【解决方案3】:

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

    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
         {;}      
        }
       }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2016-12-21
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多