0

我正在尝试了解 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;

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

4

1 回答 1

0

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

有关迁移,请参阅本指南:https ://agrosner.gitbooks.io/dbflow/content/Migrations.html

于 2017-10-31T09:50:42.227 回答