2016-04-12 7 views
0

У меня есть простой объект:Как обновить базу данных с помощью Sugar Orm?

public class MyEntity extends SugarRecord { 

    String name; 
    int value; 

    public MyEntity() { 
     //empty ctr for sugar orm 
    } 

    public MyEntity(String name, int value) { 
     this.name = name; 
     this.value = value; 
    } 
} 

В App начала я сделать экземпляр и сохранить его как это:

Log.i("db_test", "count_before: "+MyEntity.count(MyEntity.class)+""); 
    new MyEntity("name", 10).save(); 
    Log.i("db_test", "count_after: "+MyEntity.count(MyEntity.class)+""); 

В журнале я вижу:

04-12 14:58:52.538: I/db_test(10691): count_before: 0 
04-12 14:58:52.555: I/Sugar(10691): MyEntity saved : 1 
04-12 14:58:52.555: I/db_test(10691): count_after: 1 

Это работает хорошо.

Так что, если я решил, что хотел бы добавить свойство в класс MyEntity. вот так:

public class MyEntity extends SugarRecord { 

    String name; 
    int value; 
    int anotherValue; ///< A new property. 
//... 

После этого я увеличиваю версию Databse, потому что модель изменилась. Так я увеличиваю следующее поле в манифесте от 1 до 2.

<meta-data 
    android:name="VERSION" 
    android:value="2"/> 

На этот раз, когда я побежал мое приложение, я получил следующее сообщение об ошибке:

E/SQLiteLog(11125): (1) table MY_ENTITY has no column named ANOTHER_VALUE 

java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: 

android.database.sqlite.SQLiteException: table MY_ENTITY has no column named ANOTHER_VALUE (code 1): , while compiling: INSERT OR REPLACE INTO MY_ENTITY(ANOTHER_VALUE,ID,VALUE,NAME) VALUES (?,?,?,?) 

Так почему же это происходит?

Я создал это свойство на своем объекте Java.

Я увеличил версию базы данных.

Что я делаю неправильно?

ответ

2

Несмотря на то, что это не идеальное решение, использование файла обновления для ручного изменения таблицы должно позволить вставить/заменить работать.

AFAIK, значение VERSION используется только для определения того, должны ли выполняться исправления.

В вашем случае, это будет случай добавления файла под названием "2.sql" в папку assets/sugar_upgrades/, содержащий:

ALTER TABLE my_entity ADD COLUMN another_value int; 

Источник: SugarORM