Как обновить таблицу с Activeandroid после добавления нового столбца

Спасибо за чтение и помощь:)

Я использую ActiveAndroid 3.0 - Android 2.2 - в моем приложении у меня есть модель под названием "пользователь". Первоначально я только создал модель со столбцами / атрибутами (id, name, passcode), я запустил приложение на эмуляторе, и оно заработало.

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
}

Затем я добавил новый столбец / атрибут - profileImage. Я запустил приложение на эмуляторе и получил столбец SQLite profileImage Ошибка не существует.

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
  @Column (name = "profile_image")
  public String profileImage;
}

Я попытался изменить имя базы данных ActiveAndroid и обновить свойства версии базы данных в файле манифеста.

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" />
<meta-data android:name="AA_DB_VERSION" android:value="2" />

Но я продолжаю получать столбец не существует ошибки.

ERROR   AndroidRuntime  Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ?

Я также пытался удалить приложение из эмулятора, перезапустить эмулятор, вызвав ActiveAndroid.cacheClear(). Пока что ничего из этого не сработало.

Я действительно ценю любую помощь. Благодарю.

2 ответа

Решение

Судя по звукам, вам не хватает скрипта обновления для переноса вашего user таблица с новой схемой. Сценарии обновления в основном содержат инструкции о том, как перейти из старого состояния базы данных в новое. В вашем конкретном случае вы захотите сообщить SQLite, что он должен добавить новый столбец, profile_image, к существующей таблице пользователей.

Чтобы обновить базу данных со схемы 1 до 2, увеличьте AA_DB_VERSION значение для 2 и дать сценарию обновления имя 2.sql, Сохраните файл в assets/migrations и дать ему следующее содержание:

ALTER TABLE user ADD profile_image TEXT;

Сценарии могут содержать любой набор операторов SQL, которые могут быть выполнены SQLiteDatabase через execSQL(...),

Более подробную информацию о миграции схем с помощью Active Android можно найти в вики на странице проекта GitHub.

"TEXT"ярлык изменен на"VARCHAR"для миграции базы данных с использованием ActiveAndroid

Все другие зарезервированные слова были выделены, кроме "TEXT". Я использовал "VARCHAR"и это сработало.

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