0

アプリストアに1つのアプリケーションがあります。ユーザーが情報を保存するローカルデータベースがあります。今、私はアプリケーションの2番目のバージョンをリリースすることを計画しています。私の質問は、アプリケーションの最初のバージョンでユーザーが入力したデータは、その2番目のバージョンで利用できるのか、それとも空白になるのかということです。

前もって感謝します。

4

1 に答える 1

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);
    }
}
于 2011-11-04T06:55:39.067 に答える