Как обновить таблицу с 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
"и это сработало.