Android Room, SQLite - ДО ожидаемого, получил 'COLUMN' - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь переименовать столбец в моей базе данных комнат.Я по глупости использовал имя столбца index и хочу изменить его на id, но эта функция миграции вызывает головные боли:

static final Migration MIGRATION_2_3 = new Migration(2, 3) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE items RENAME COLUMN index TO id;");
        }
    };

Я следовал этой синтаксической диаграмме для запроса:

SQLite alter table syntax UML

В Android Studio выдается ошибка TO expected, got 'COLUMN', и я не могу использовать базу данных из-за исключительной ситуации RuntimeException:

Caused by: java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.

Номер версииправильно, поэтому я предполагаю, что эта проблема вызвана синтаксической проблемой выше;Я не могу найти что-то еще не так с моей настройкой.

1 Ответ

0 голосов
/ 16 октября 2018

Android использует SQLite v3.19.Это делает переименование столбца с использованием RENAME COLUMN невозможным.Лучший подход - воссоздать таблицу. - Лео Пелозо

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

@Query("DELETE FROM items")
void dropTable();

... затем создайте таблицу снова, хотя я не уверен, как это сделать.

Обновление:

Я смог (думаю, мы будемсмотри ...) чтобы воссоздать таблицу, вызвав вышеуказанную функцию, удалив ВСЕ миграции и установив версию базы данных обратно на 1. Затем я заново определил сам класс базы данных с правильными именами и т. д. и смог вставить данныев это без каких-либо ошибок.Добавление .fallbackToDestructiveMigration() в мою базу данных синглтон-класса также было необходимо.

Лично я считаю, что это немного нелепо только для простого переименования столбца;Мне никогда не удавалось просто переименовать столбец и добавить миграцию для изменения, а также я не смог удалить таблицу и заново создать ее с правильным именем столбца и добавить ее в качестве миграции.Но, увы, это ведь Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...