如何使用 Sugar Orm 升级数据库?
How to upgrade database with 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;
}
}
在应用程序启动时,我创建了一个实例并像这样保存它:
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 class 添加一个 属性 怎么办?像这样:
public class MyEntity extends SugarRecord {
String name;
int value;
int anotherValue; ///< A new property.
//...
在此之后,我增加了数据库版本,因为模型已经改变。
因此,我将清单中的以下字段从 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 对象上做了这个 属性。
我已经增加了数据库版本。
我哪里做错了?
虽然这不是一个理想的解决方案,但使用升级文件手动更改 table 应该允许插入/替换工作。
AFAIK,VERSION 值仅用于标识补丁是否应 运行。
在您的情况下,需要将名为“2.sql”的文件添加到您的 assets/sugar_upgrades/
文件夹中,其中包含:
ALTER TABLE my_entity ADD COLUMN another_value int;
来源:SugarORM
我有一个简单的实体:
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;
}
}
在应用程序启动时,我创建了一个实例并像这样保存它:
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 class 添加一个 属性 怎么办?像这样:
public class MyEntity extends SugarRecord {
String name;
int value;
int anotherValue; ///< A new property.
//...
在此之后,我增加了数据库版本,因为模型已经改变。 因此,我将清单中的以下字段从 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 对象上做了这个 属性。
我已经增加了数据库版本。
我哪里做错了?
虽然这不是一个理想的解决方案,但使用升级文件手动更改 table 应该允许插入/替换工作。
AFAIK,VERSION 值仅用于标识补丁是否应 运行。
在您的情况下,需要将名为“2.sql”的文件添加到您的 assets/sugar_upgrades/
文件夹中,其中包含:
ALTER TABLE my_entity ADD COLUMN another_value int;
来源:SugarORM