2013-06-29 6 views
7

спасибо за чтение и помогает :)Как обновить таблицу с 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 column 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(). Пока ничего не получилось.

Я очень ценю любую помощь. Благодарю.

ответ

19

Из-за этого звука вам не хватает сценария обновления, чтобы перенести таблицу 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 можно узнать в the wiki on the GitHub project page.

+0

благодарит за помощь, очень ценится. – dagger

+1

Из любопытства не следует удалять приложение и переустанавливать его? Или удаление приложения не удаляет БД? –

+1

@JoshPinter: Да, удаление приложения должно работать. На самом деле, поражение «Clear Data» должно также делать трек. Это не долгосрочное решение, потому что вы, вероятно, не хотите, чтобы пользователи вашего приложения прошли этот процесс. Правильный подход заключается в обеспечении соответствующей логики обновления схемы. –

1

«TEXT» ярлык меняются на «VARCHAR» для миграции баз данных с помощью ActiveAndroid

Всех других зарезервированных слов были выделены для «TEXT» за исключением. Я использовал «VARCHAR», и он сработал.

Смежные вопросы