Я считаю, что вы могли бы использовать следующее: -
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
//Create the new table BUT with a different name
database.execSQL("DROP TABLE IF EXISTS new_mediatags;"); -- just in case but not really required
database.execSQL("CREATE TABLE new_mediatags (the_column_definitions_you_want)");
//Copy existing data into the new table (if required)
database.execSQL("INSERT INTO new_mediatags SELECT the_columns_you_are keeping,null;");
//Rename the original table
database.execSQL("ALTER TABLE mediatags RENAME TO old_mediatags;");
//Rename the new table to the original name
database.execSQL("ALTER TABLE new_mediatags RENAME TO mediatags;");
//Drop the renamed original table
database.execSQL("DROP TABLE IF EXISTS old_mediatags;");
}
};
- Это предполагает, что вы хотите сохранить существующие данные, если нет, то просто не копируйте данные.
В качестве примера рассмотрим следующее: -
-- Create the original and load with some data
DROP TABLE If EXISTS mediatags;
CREATE TABLE IF NOT EXISTS mediatags (col1, col2, col3);
INSERT INTO mediatags VALUES('A','B','C'),('D','E','F');
SELECT * FROM mediatags;
-- The code that would be used
DROP TABLE IF EXISTS new_mediatags;
CREATE TABLE IF NOT EXISTS new_mediatags (col1, col3, col4); -- note no col2 but new col added as col4
INSERT INTO new_mediatags SELECT col1,col3,null FROM mediatags; -- copy existing data
ALTER TABLE mediatags RENAME TO old_mediatags;
ALTER TABLE new_mediatags RENAME TO mediatags;
DROP TABLE old_mediatags;
SELECT * FROM mediatags; -- output the data for the demo
Первые 4 строки просто создают исходную таблицу, загружают ее с некоторыми данными и выводят данные в соответствии с: -
Остальные строки меняют исходную таблицу для новой таблицы, удаляя col2 и добавляя col4, копируя существующие данные (новый столбец будет нулевым, хотя и будет иметь значениеможет быть предоставлено) и, наконец, для демонстрации выводит данные в измененную таблицу в соответствии с: -