gpt4 book ai didi

android - 如何使用 Sugar Orm 升级数据库?

转载 作者:行者123 更新时间:2023-11-29 17:20:56 24 4
gpt4 key购买 nike

我有一个简单的实体:

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 类添加一个属性怎么办?像这样:

public class MyEntity extends SugarRecord {

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

在此之后,我增加了数据库版本,因为模型已经改变。因此,我将 list 中的以下字段从 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 对象上设置了这个属性。

我已经增加了数据库版本。

我做错了什么?

最佳答案

虽然这不是一个理想的解决方案,但使用升级文件手动更改表应该允许插入/替换工作。

据我所知,VERSION 值仅用于标识是否应运行补丁。

在您的情况下,需要将一个名为“2.sql”的文件添加到您的 assets/sugar_upgrades/ 文件夹中,其中包含:

ALTER TABLE my_entity ADD COLUMN another_value int;

来源:SugarORM

关于android - 如何使用 Sugar Orm 升级数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com