Как обновить таблицу в ORM ActiveAndroid?

Я использую в своем проекте "ActiveAndroid". У меня есть модель, которую я храню. вот модель:

@Table(name="Params")
public class Params extends Model {

    public Params() {
        super();
    }

    @Expose
    @Column(name="height")
    @SerializedName("heigth")
    public int heigth;

    @Expose
    @Column(name="weight")
    @SerializedName("weight")
    public int weight;
}

здесь все сохранено:

public void success(User user, Response response) {
               user.params.save();
               user.save();
                ActiveAndroid.clearCache();
            }

Все работает нормально! Но если я хочу добавить еще одно поле в модель:

@Expose
    @Column(name="strong")
    @SerializedName("strong")
    public int strong;

Я получаю сообщение об ошибке:

android.database.sqlite.SQLiteException: table Params has no column named strong (code 1): , while compiling: INSERT INTO Params(Id,weight,height,strong) VALUES (?,?,?,?)

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

Теперь, когда я попробовал:

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

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

Я знаю, что при обычном использовании базы в методе апгрейда можно изменить версию базы и реструктурировать таблицу. но как это сделать в ORM "ActiveAndroid"?


person Pavel Petrashov    schedule 27.01.2015    source источник


Ответы (1)


Есть вещь, известная как Migration, в Active Android вы можете сделать это, как это

  1. Добавьте поле в свою модель (что вы уже сделали)

  2. Измените версию базы данных в метаданных AndroidManifest.xml.

  3. Напишите свой сценарий миграции. Назовите свой скрипт [newDatabaseVersion].sql и поместите его в каталог [YourApp’sName]/app/src/main/assets/migrations. В моем конкретном примере я создам файл [MyAppName]/app/src/main/assets/migrations/2.sql.

E.G. ALTER TABLE Items ADD COLUMN Priority TEXT;

person Murtaza Khursheed Hussain    schedule 27.01.2015