如何在ORM“ActiveAndroid”中更新表格?

时间:2015-01-27 11:22:38

标签: android activeandroid

我在我的项目" ActiveAndroid"中使用。我有一个我保留的模型。这是一个模型:

@Table(name="Params")
public class Params extends Model {

    public Params() {
        super();
    }

    @Expose
    @Column(name="height")
    @SerializedName("heigth")
    public int heigth;

    @Expose
    @Column(name="weight")
    @SerializedName("weight")
    public int weight;
}

这里全部保存:

public void success(User user, Response response) {
               user.params.save();
               user.save();
                ActiveAndroid.clearCache();
            }

一切正常!但是如果我想在模型中添加另一个字段:

@Expose
    @Column(name="strong")
    @SerializedName("strong")
    public int strong;

我收到错误:

android.database.sqlite.SQLiteException: table Params has no column named strong (code 1): , while compiling: INSERT INTO Params(Id,weight,height,strong) VALUES (?,?,?,?)

当然我知道为什么会出现这个错误。因为表中没有这样的列。这就是问题,如何添加这个列???

现在我已经尝试过了:

  1. 完全删除程序,再次编译,运行,一切正常!因为它会从此列创建一个新表。

  2. 尝试更改清单数据库中的版本,但这并没有带来成功。

  3. 我知道在升级方法中正常使用数据库可以更改数据库和重组表的版本。但是如何在ORM" ActiveAndroid" ?

1 个答案:

答案 0 :(得分:4)

有一个称为Migration的东西,在Active Android中你可以像this

那样做
  1. 在模型中添加字段(您已经做过)

  2. 将数据库版本更改为AndroidManifest.xml的元数据

  3. 编写迁移脚本。将脚本命名为[newDatabaseVersion].sql,并将其放在目录[YourApp’sName]/app/src/main/assets/migrations中。在我的具体示例中,我将创建文件[MyAppName]/app/src/main/assets/migrations/2.sql

  4. E.G。 ALTER TABLE Items ADD COLUMN Priority TEXT;