Android - DBflow迁移脚本

时间:2017-09-06 19:59:38

标签: android database-migration dbflow

我正在尝试了解DBFlow,因为在我现在正在工作的项目中,之前的人决定使用它。所以在数据库类中我有这个:

@Database(name = ConstructDB.NAME, version = ConstructDB.VERSION)
public class ConstructDB {
  public static final String NAME = "construct_v3";
  public static final int VERSION = 18;

  @Migration(version = 17, database = ConstructDB.class)
  public static class Migration17 extends AlterTableMigration<Task> {
    public Migration17(Class<Task> table) {
      super(table);
    }

    @Override
    public void onPreMigrate() {
      super.onPreMigrate();
      addColumn(SQLiteType.INTEGER, NAMES.DB.READ_COUNT);
    }
  }
}

这是以前的迁移脚本。所以现在我想在同一个表中添加一个新列。我在表类中做了必要的更改(比如添加列,set和get方法等)。我想写一个新脚本来接受我的更改。所以我这样做了:

@Database(name = ConstructDB.NAME, version = ConstructDB.VERSION)
public class ConstructDB {
  public static final String NAME = "construct_v3";
  public static final int VERSION = 19;

  @Migration(version = 18, database = ConstructDB.class)
  public static class Migration18 extends AlterTableMigration<Task> {
    public Migration18(Class<Task> table) {
      super(table);
    }

    @Override
    public void onPreMigrate() {
      super.onPreMigrate();
      addColumn(SQLiteType.TEXT, NAMES.DB.CATEGORY_ID);
    }
  }
}

但是当我运行项目时,我会遇到很多错误:

error: cannot find symbol
import com.construct.v2.dagger.DaggerConstructComponent;

主要是这样的错误(something_table,这是我数据库中的所有表。这个_table文件位于build文件夹下,不需要编辑):

error: cannot find symbol
import com.construct.v2.models.Attachment_Table;

如果我返回到我在更改之前的状态(在任务模型和迁移脚本中),代码运行就好了。所以我认为我做错了什么或者跳过了一些步骤。如何运行迁移脚本?我需要做出哪些其他改变?

1 个答案:

答案 0 :(得分:-1)

您需要为更改添加新的迁移类。迁移版本应与DB版本相同。还要检查你是否使用了正确的数据类型(是你的ID字符串?)。

请参阅本指南了解迁移:https://agrosner.gitbooks.io/dbflow/content/Migrations.html