How to update table with activeandroid after adding a new column

烈酒焚心 提交于 2019-12-09 11:22:11

问题


thank you for reading and helping :)

I am using ActiveAndroid 3.0 - Android 2.2 - In my app I have a model called "user". initially I only created the model with (id, name, passcode) columns/attributes, I ran the app on the emulator, and it worked.

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

Then I added a new column/attribute - profileImage. I ran the app on the emulator and i got SQLite column profileImage does not exist error.

@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;
}

I have tried changing the ActiveAndroid db name and updating the db version properties in the manifest file.

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

But I keep getting the column does not exist error.

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

I have also tried, un-installing the app from emulator, restarting the emulator, calling ActiveAndroid.cacheClear(). So far none of this worked.

I really appreciate any help. thanks.


回答1:


From the sounds of it, you're missing the upgrade script to migrate your user table to the new schema. The upgrade scripts basically contains the instructions on how to get from the old state of the database to the new one. In your specific case, you'll want to tell SQLite that it should add a new column, profile_image, to the existing user table.

To upgrade your database from schema 1 to 2, bump up the AA_DB_VERSION value to 2 and give the upgrade script the name 2.sql. Save the file under assets/migrations and give it the following content:

ALTER TABLE user ADD profile_image TEXT;

The scripts may contains any set of SQL statements that can be executed by the SQLiteDatabase through execSQL(...).

More details on schema migrations with Active Android can be found in the wiki on the GitHub project page.




回答2:


The "TEXT" label is changed to "VARCHAR" for database migration using ActiveAndroid

All other Reserved words were highlighted except for "TEXT". I used "VARCHAR" and it worked.



来源:https://stackoverflow.com/questions/17385466/how-to-update-table-with-activeandroid-after-adding-a-new-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!