2011-11-04 56 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

相關問題