Android 由于文件室中的唯一约束,数据库迁移失败
我在旧数据库中的一个表中具有唯一约束。 迁移到room时,我按照[link][1]上的说明创建了新表,并在“TaskDetail”实体类中使用“Indexes”关键字应用了唯一约束。 并提供了空迁移。在运行迁移测试时,我得到了与唯一约束相关的错误,如下所述。 我做错什么了吗 数据库模式 房间实体表 RoomDatabase类 错误Android 由于文件室中的唯一约束,数据库迁移失败,android,android-room,android-architecture-components,Android,Android Room,Android Architecture Components,我在旧数据库中的一个表中具有唯一约束。 迁移到room时,我按照[link][1]上的说明创建了新表,并在“TaskDetail”实体类中使用“Indexes”关键字应用了唯一约束。 并提供了空迁移。在运行迁移测试时,我得到了与唯一约束相关的错误,如下所述。 我做错什么了吗 数据库模式 房间实体表 RoomDatabase类 错误 您必须为表定义unix索引。对于task\u master,如果您的唯一键是task\u id请添加如下内容: database.execSQL("CREATE UN
您必须为表定义unix索引。对于
task\u master
,如果您的唯一键是task\u id
请添加如下内容:
database.execSQL("CREATE UNIQUE INDEX `index_task_master_task_id` ON `task_master` (`task_id`)");
与
task_detail
table相同,这里使用了完全相同的db文件,但我的错误是:index=[],found:index=null
@Entity(tableName = "task_master")
public class Task {
@ColumnInfo(name = "task_id")
@PrimaryKey(autoGenerate = true)
@NonNull
private int taskId;
@ColumnInfo(name = "task_note")
private String task;
private @TaskStatus
int status;
}
//TOKEN DETAIL TABLE
@Entity(tableName = "task_detail",indices ={@Index(name = "detail",value = "detail",unique = true)})
public class TaskDetail {
@PrimaryKey(autoGenerate = true)
private int id;
@NonNull
private String detail;
}
@Database(entities = {Task.class, TaskDetail.class},version = 2,exportSchema = true)
public abstract class AppDatabase extends RoomDatabase{
private static final Object sObject = new Object();
private static AppDatabase sInstance;
public abstract TaskDao getTaskDao();
public static AppDatabase getInstance(Context context){
if(sInstance == null){
synchronized (sObject){
if(sInstance == null){
sInstance = Room.databaseBuilder(context,AppDatabase.class,"task.db")
.allowMainThreadQueries()
.build();
}
}
}
return sInstance;
}
}
expacted:TableInfo{name='task_detail', columns={id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}, detail=Column{name='detail', type='TEXT', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[Index{name='detail', unique=true, columns=[detail]}]}
found:TableInfo{name='task_detail', columns={id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}, detail=Column{name='detail', type='TEXT', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}
database.execSQL("CREATE UNIQUE INDEX `index_task_master_task_id` ON `task_master` (`task_id`)");