我正在尝试了解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;
如果我返回到我在更改之前的状态(在任务模型和迁移脚本中),代码运行就好了。所以我认为我做错了什么或者跳过了一些步骤。如何运行迁移脚本?我需要做出哪些其他改变?
答案 0 :(得分:-1)
您需要为更改添加新的迁移类。迁移版本应与DB版本相同。还要检查你是否使用了正确的数据类型(是你的ID字符串?)。
请参阅本指南了解迁移:https://agrosner.gitbooks.io/dbflow/content/Migrations.html