如何从iOS应用程序备份和恢复sqlite3文件

时间:2015-07-03 05:00:14

标签: ios sqlite

我打算开发一个销售点系统,并打算使用sqlite3作为数据库。经过几天的研究,我在备份或恢复sqlite3数据库时找不到任何教程或示例。我可以接受的解决方案是上传到云端或Dropbox。

1 个答案:

答案 0 :(得分:3)

试试这个答案。

创建备份&使用Dropbox恢复文件

按照iOS App的Dropbox集成中显示的步骤进行操作。

首先,获取您的本地数据库路径,如下所示:

NSArray *docsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *docPath = [docsDirectory objectAtIndex:0];

databasePath = [docPath stringByAppendingPathComponent:@"filename.sqlite"];

NSLog(@"db path -> %@",databasePath);

然后将该文件上传到dropbox,如下所示:

    NSString *fileName = @"filename.sqlite";
    NSString *destDir = @"/";

    if (appDelegateObj.parentRevId == nil)
    {
            //Uploads a fresh file.
            [appDelegateObj.restClientObj uploadFile:fileName toPath:destDir withParentRev:nil fromPath:databasePath];
    }
    else
    {
    // Uploads a file with already existing file
            [appDelegateObj.restClientObj uploadFile:fileName toPath:destDir withParentRev:appDelegateObj.parentRevId fromPath:databasePath];
    }

这里,parentRevId用于现有文件的标识符。

您可以从Dropbox委托方法获取parentRevId。

然后将Dropbox文件恢复到本地数据库路径,如下所示:

 if (appDelegateObj.parentRevId == NULL) // No such File found
 {
       [SVProgressHUD showErrorWithStatus:@"No Data in Dropbox" maskType:SVProgressHUDMaskTypeBlack]; // Activity Indicator
 }
 else
 {
       NSString *destDir = @"/filename.sqlite";                             
       [appDelegateObj.restClientObj loadFile:destDir intoPath:databasePath];
 }
  • restClientObj是DBRestClient(Dropbox)的对象