Столбец измененной таблицы не может получить доступ с помощью Greendao-Android

Используя onUpgrade в SQLiteOpenHelper, я могу изменить таблицу и добавить новое имя столбца со значением по умолчанию.

Но когда я получаю доступ к этой конкретной таблице внутри действия, она показывает только старое количество столбцов. В зависимости от изменения должно отображаться 4 (количество столбцов). Но это показывает только 3.

Мой код внутри метода onUpgrade:

 db.execSQL("ALTER TABLE " + MyTableDaoDao.TABLENAME + " ADD COLUMN 'VRESION_NO' INTEGER NOT NULL DEFAULT '11';");

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

Для подсчета всех столбцов:

 daoSession.getMyTableDao().getAllColumns().length  // returns old table count

Как получить обновленные данные таблицы в GreenDAO? Кто-нибудь сталкивался с такой ситуацией.

Заранее спасибо.

2 ответа

Решение

Возможно, вы забыли воссоздать свой дао-код из обновленной схемы.

Greendao не использует отражение или сканирование базы данных для создания отображения между базой данных и Java. Это отображение создается dao-генератором. Итак, есть две задачи, если вы хотите обновить схему базы данных:

  1. Обновите сущностные классы и daos, воссоздав их с новой схемой и увеличьте версию схемы.
  2. Реализуйте свою стратегию обновления в своем приложении, то есть удалите все таблицы и создайте их заново или добавьте / измените / удалите столбцы / таблицы / индексы /..., которые изменились со времени версии схемы, которая была активной ранее (см. Мои ответы здесь и здесь).).

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

Вы можете попытаться удалить таблицу, а затем воссоздать ее с новым столбцом, возможно, тогда она будет зарегистрирована. Также подумайте, что так проще писать динамический код. (просто добавьте столбец в список строк и выполните цикл при создании таблицы).

Другие вопросы по тегам