2013-11-08 4 views
1

Я разрабатываю для iOS, и у меня есть предыдущая база данных, очень плохо построенная. Теперь уже 140 запечатанных, но в моем обновлении я делаю новую базу данных, но я не могу удалить данные ... Как я могу изменить данные из базы данных A в базу данных B? Я использую sqlite3 в Xcode 5Изменить данные базы данных

+0

Это довольно общий вопрос, но вы можете либо скопировать все данные в новую таблицу (в зависимости от того, сколько данных в приложениях установлено на телефонах), либо изменить существующие данные в таблицах в базе данных, добавив новые столбцы или даже новые таблицы для ваших новых данных и использовать их с этого момента. Надеюсь это поможет. – c0d3Junk13

ответ

1

Ниже приведен пример кода изменения столбца в таблице базы данных:

- (void)alterDB { 

    sqlite3_stmt *statement; 
    sqlite3_stmt *selectStmt; 

    const char *columnExists = "select callCount from lastCall"; 
    //Alter the table ONLY IF column we want doesn't exist 
    if (sqlite3_prepare_v2(database, columnExists, -1, &selectStmt, NULL) != SQLITE_OK) 
    { 
     NSString *updateSQL = [NSString stringWithFormat:@"ALTER TABLE lastCall ADD COLUMN callCount INTEGER"]; 
     const char *update_stmt = [updateSQL UTF8String]; 
     sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL); 

     if (sqlite3_step(statement) == SQLITE_DONE) { 
      NSLog(@"DATABASE ALTERED"); 
     } else { 
      NSLog(@"error altering database"); 
     } 
    } 

} 

Надеюсь, это даст вам представление.

0

Написать код миграции, , который будет выбирать данные из базы данных A и вставить его в базу данных B.

0

При работе с различными схемами у меня есть метод, который я всегда вызываю при открытии базы данных, которая проверяет версию схемы в таблице, выделенной для этой цели, а затем выполняет любые изменения, необходимые для схемы.

- (void) checkSchema { 
    if([[self preferenceForKey:@"SchemaVersion"] isEqualToString: @"1"]) { 
     [db sqlExecute:@"create table Documents(documentID int, description text, type text, url text, modifiedDate text, read int, fileName text, needsUpdate int, primary key(documentID,type));"]; 
     [self setPreference:@"2" ForKey:@"SchemaVersion"]; 
    } 

    // etc. 
} 

Так развиваясь, я могу добавить изменения схемы и независимо от того, какая версия приложения кто-то использует, когда они модернизируют они будут получать последние изменения схемы.

Это из-за этого и работа по изменению всех моих методов доступа к базе данных, которые я теперь использую SimpleDB (https://github.com/AaronBratcher/SimpleDB), ключ/значение db, которое я написал. Полностью другой способ доступа к данным, который делает вещи намного проще.

Смежные вопросы