【问题标题】:How to do database migration if SQLite is used?如果使用 SQLite,如何进行数据库迁移?
【发布时间】:2012-03-16 09:38:35
【问题描述】:

我的应用在 App Store 上,在其新版本中,我更新了架构,例如列数已更改,列名已更改。但是现在当我在 App Store 上传新版本时,应用程序崩溃了。

我知道发生这种情况是因为我更改了架构。我用过 SQLite,请问有什么办法可以解决这个问题吗?

【问题讨论】:

  • 您的数据库已存在于旧版应用程序中。这就是它崩溃的原因。所以,你应该删除旧的数据库并通过代码创建这个新的数据库。
  • @user1025560 你能解释一下怎么做吗?

标签: iphone database sqlite


【解决方案1】:

当您打开(或创建)数据库时,SQLite 支持“版本”。这是您决定的唯一值。当您更改架构时,您应该更改“版本”字符串,以便为新数据库放弃旧数据库。与在第一次设置时创建数据库的方式相同,您还必须手动将任何重要数据从以前的数据库迁移到新数据库。

很遗憾,无法将应用恢复到上一个​​良好版本,您能做的最好的事情就是将应用从商店中删除几天,直到修复到位。

【讨论】:

    【解决方案2】:
    1. 试试这样。

      1. 检查版本
      2. 如果是新的,那么 - 如果你想从旧数据库中获取所有数据 并删除旧数据库。别的 没有变化
      3. 创建新数据库
      4. 插入从旧数据库获取的数据

        NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:dbName];
        
        BOOL dbSuccess = [fileManager fileExistsAtPath:dbPath];
        
        if (dbSuccess) {
            NSDictionary *oldDetailsDict = [NSDictionary dictionaryWithContentsOfFile:writablePath];
        
            if(![[oldDetailsDict valueForKey:@"version"] isEqualToString:Current_APP_VERSION]){
                NSString *oldVersion = [oldDetailsDict valueForKey:@"version"];
                if ([oldVersion isEqualToString:Current_APP_VERSION]) {
                    //no code change needed
        
                }else{
                    //Get data from old db
                    //Data moved to array
                    NSArray *oldDataArray = [Product getDataFromDatabase];  
        
                    //Remove the old Database
                    NSString *deletePath  = [documentsDirectory stringByAppendingPathComponent:@"sample.sqlite"];
                    [fileManager removeItemAtPath:deletePath error:nil];
        
                    //Create the new DB for new version
                    [self createdatabase];
        
                    //Again Insert the old data to new db
                    for (Product *pro in oldDataArray) {
                        [pro insertToDB];
                    }
                }
            }
        }
        

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2017-02-10
      相关资源
      最近更新 更多