OrmLite - сохранить данные перед обновлением таблицы

Можно ли сохранить данные из таблицы до того, как моя модель изменит базу данных?

Например, я переименовываю столбец и не потеряю данные. То есть я хочу получить все данные из столбца c1, переименовать свой столбец в c2 и записать все данные обратно.


person Happo    schedule 11.06.2013    source источник
comment
Я не совсем понимаю, что вы пытаетесь сделать. Вы можете отредактировать свой пост, чтобы предоставить больше деталей.   -  person Gray    schedule 11.06.2013
comment
Я понял, что теряю некоторые данные после обновления модели. Итак, я хочу написать что-то вроде патча для загрузки некоторых данных из таблицы до обновления ее схемы. После обновления схемы я записываю предыдущие загруженные данные обратно в таблицу или в другую.   -  person Happo    schedule 11.06.2013


Ответы (2)


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

Sqlite не поддерживает переименование столбцов, поэтому это не будет работать под Android. Однако вы, безусловно, можете добавить дополнительный столбец. Существует хорошая документация по изменениям схемы в Android/ORMLite. Смотрите эту страницу:

http://ormlite.com/docs/upgrade-schema

Например, вы можете выполнить следующие обновления схемы:

dao.executeRaw(
    "ALTER TABLE `account` ADD COLUMN hasDog BOOLEAN DEFAULT 0;");
dao.updateRaw("UPDATE `account` SET hasDog = 1 WHERE dogCount > 0;");
person Gray    schedule 11.06.2013

Вот цитата из документации ORMLite: "Вы не можете переименовать или удалить столбец или изменить ограничения».

Итак, ваш выбор:

  1. оставить все как есть,
  2. добавить новый столбец, скопировав все данные из старого в новый как часть обновления, и просто полностью игнорировать старый столбец, или
  3. Используйте стратегию удаления/создания для обновления: создайте резервную копию данных из таблицы во временную таблицу, удалите таблицу, заново создайте ее, как вы хотите, скопируйте все данные обратно в нее и, наконец, удалите временную таблицу. стол.

Обновления базы данных всегда нервозны (требуется много обработки ошибок, много тестов), честно говоря, если имя — это единственное, что вас беспокоит, я бы оставил его в покое (вариант 1). Если вам действительно нужно его изменить, то вариант 2 имеет низкий риск, но оставляет «мертвый» столбец и данные лежат без дела. Вариант 3 может быть вашим выбором, если, например, данные составляют значительный процент от общего размера базы данных.

person Phil Haigh    schedule 11.06.2013