Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to update table with activeandroid after adding a new column

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.

like image 907
dagger Avatar asked Jun 29 '13 22:06

dagger


People also ask

How to update a column with column of another table in sql?

UPDATE table SET col = new_value WHERE col = old_value AND other_col = some_other_value; UPDATE table SET col = new_value WHERE col = old_value OR other_col = some_other_value; As you can see, you can expand the WHERE clause as much as you'd like in order to filter down the rows for updating to what you need.

How to update same table column in sql?

In such a case, you can use the following UPDATE statement syntax to update column from one table, based on value of another table. UPDATE first_table, second_table SET first_table. column1 = second_table. column2 WHERE first_table.id = second_table.

What is active in android?

Active Android last updated two years ago, and Realm is a living project. Active Android is just wrapper around SQLite database. Realm offers more features like auto-refreshing query results, creation of objects from JSON, or database change notifications.


2 Answers

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.

like image 154
MH. Avatar answered Sep 22 '22 14:09

MH.


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.

like image 22
Zeerak Hameem Avatar answered Sep 22 '22 14:09

Zeerak Hameem