Столбец измененной таблицы не может получить доступ с помощью 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-генератором. Итак, есть две задачи, если вы хотите обновить схему базы данных:
- Обновите сущностные классы и daos, воссоздав их с новой схемой и увеличьте версию схемы.
- Реализуйте свою стратегию обновления в своем приложении, то есть удалите все таблицы и создайте их заново или добавьте / измените / удалите столбцы / таблицы / индексы /..., которые изменились со времени версии схемы, которая была активной ранее (см. Мои ответы здесь и здесь).).
Единственное, что я могу придумать, это то, что вы получаете столбцы из неправильной таблицы.
Вы можете попытаться удалить таблицу, а затем воссоздать ее с новым столбцом, возможно, тогда она будет зарегистрирована. Также подумайте, что так проще писать динамический код. (просто добавьте столбец в список строк и выполните цикл при создании таблицы).