Зеленый Дао в обновлении. Как я могу добавить новые столбцы в старые таблицы?

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

 if(oldVersion==SCHEMA_VERSION_OLD_VERSION&& newVersion==SCHEMA_VERSION){
             Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by adding language & checklist table");                 
             boolean ifNotExists = true;
             NewTableDao.createTable(db, ifNotExists);
             NewTable2Dao.createTable(db, ifNotExists);              
        }

И до сих пор он работал отлично. Однако для моей текущей схемы я добавил больше соединений между таблицами, и после обновления со старой версии я получаю сбои, указывающие, что новые столбцы не существуют.

В greendao есть способ добавить новые столбцы? мне нужно написать sqlite-код по-старому, чтобы все заработало? (Любые примеры кода очень много приветствуются)

заранее спасибо

1 ответ

Решение
  1. Взгляните на код SQL для создания таблицы (находится в классе DAO).
  2. Извлеките соответствующие изменения в SQL.
  3. Обновите таблицу выхода вручную.

Пример:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.i(TAG, "Update Schema to version: "+Integer.toString(oldVersion)+"->"+Integer.toString(newVersion));
    switch (oldVersion) {
        case 1:
            /* v1->v2: all changes made in version 2 come here */
            db.execSQL("ALTER TABLE "+MyDao.TABLENAME+" ADD COLUMN 'NEW_COL_1' INTEGER;");
            db.execSQL("DROP TABLE IF EXISTS 'MY_OLD_ENTITY'");
            /* break was omitted by purpose. */
        case 2:
            /* v2->v3: all changes made in version 3 come here */
            MyNewDao.createTable(db, true);
            db.execSQL("ALTER TABLE "+MyDao.TABLENAME+" ADD COLUMN 'NEW_COL_2' TEXT;");
            /* break was omitted by purpose. */
    }
}
Другие вопросы по тегам