2011-11-04 114 views
0

我在应用程序商店中有一个应用程序。它有用户存储一些信息的本地数据库。现在我打算发布第二个版本的应用程序。我的问题是,用户在第一个版本的应用程序中输入的数据是否会在第二个版本中提供,或者是否为空白。应用程序的本地数据库将与应用程序的更新版本相同

在此先感谢。

回答

0

您需要在代码中测试以前的版本并以编程方式合并它们。

事情是这样的:

- (void)merge { 
    NSString *dataDir = Doogie(@"data"); 
    NSString *sqlDir = Doogie(@"sql"); 
    NSString *dataPath = PathAppend(dataDir, @"name.db"); 
    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) { 
     ILogPlus(@"%@", @"No merge necessary"); 
     return; 
    } 
    const char *oldDBPath = [dataPath UTF8String]; 
    const char *mainDBPath = [PathAppend(sqlDir, @"name.db") UTF8String]; 
    sqlite3 *mainDB; 
    if (sqlite3_open(mainDBPath, &mainDB) == SQLITE_OK) { 
     NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS old_db", oldDBPath]; 
     char *errorMessage; 
     if (sqlite3_exec(mainDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) { 
      sqlite3_stmt *selectStmt; 

      NSString *selectSQL = @"insert into main.favorites select * from old_db.favorites"; 
      if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) { 
       while (sqlite3_step(selectStmt) == SQLITE_ROW) { 
        //do something 
       } 
      } 
      else { 
       NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB)); 
      } 

      selectSQL = @"insert into main.meals select * from old_db.meals"; 
      if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) { 
       while (sqlite3_step(selectStmt) == SQLITE_ROW) { 
        //do something 
       } 
      } 
      else { 
       NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB)); 
      } 

      selectSQL = @"insert or ignore into main.usda select * from old_db.usda"; 
      if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) { 
       while (sqlite3_step(selectStmt) == SQLITE_ROW) { 
        //do something 
       } 
      } 
      else { 
       NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB)); 
      } 
     } 
     else { 
      NSLog(@"Error while attaching databases: '%s'", errorMessage); 
     } 
    } 
    else { 
     NSLog(@"Failed to open database at %@ with error %s", mainDBPath, sqlite3_errmsg(mainDB)); 
     sqlite3_close(mainDB); 
    } 
} 
+0

感谢您的宝贵意见... :) – Satish

+0

@Satish,欢迎您。如果它回答你的问题,请选择它作为答案。 –

+0

雅我会一旦我实现它..我仍然无法找到任何方式来检测应用程序的版本,如果你让我知道那部分也将是伟大的。谢谢... – Satish

相关问题