简体   繁体   English

由于房间中的唯一约束,数据库迁移失败

[英]Database Migration Failed due to unique constraint in room

I am having unique constraint in one of my table in my old database. 我在旧数据库中的一个表中有唯一约束。 While migrating to room, I have created new table as per instruction given on [link][1] and applied unique constraint using "indices" keyword in "TaskDetail" entity class. 在迁移到房间时,我根据[link] [1]上给出的指令创建了新表,并在“TaskDetail”实体类中使用“indices”关键字应用了唯一约束。 And provided empty migration. 并提供空迁移。 while running migration test i get error related to unique constraint as mentioned below. 在运行迁移测试时,我得到与唯一约束相关的错误,如下所述。 Am I doing any thing wrong?? 我做错了什么?

Database Schema 数据库架构

String CREATE_TABLE_TASK = "CREATE TABLE IF NOT EXISTS "+TASK+
            " (`task_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
            "`task_note` TEXT," +
            "`status` INTEGER NOT NULL)";


    String CREATE_TABLE_TASK_DETAIL = "CREATE TABLE IF NOT EXISTS "+TASK_DETAIL+
            " (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
            "`detail` TEXT NOT NULL UNIQUE)";

Room Entity Tables 房间实体表

@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;

    }

RoomDatabase class RoomDatabase类

@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;
    }
}

Error 错误

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=[]}

You have to define unix index for your tables. 您必须为表定义unix索引。 For task_master if your unique key is task_id add something like: 对于task_master如果您的唯一键是task_id添加以下内容:

database.execSQL("CREATE UNIQUE INDEX `index_task_master_task_id` ON `task_master` (`task_id`)");

Same as for the task_detail table task_detail表相同

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Room DB迁移的致命异常:android.database.sqlite.SQLiteConstraintException:UNIQUE约束失败 - Fatal Exception on Room DB Migration: android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed 房间 UNIQUE 约束失败 - Room UNIQUE constraint failed 具有 UNIQUE KEY 约束的房间迁移不起作用 - Room migration with UNIQUE KEY constraint not working Room 数据库中的非空约束失败 - Not Null constraint failed in Room database 通过房间向数据库插入数据时崩溃:引起:android.database.sqlite.SQLiteConstraintException:UNIQUE 约束失败 - crash when insert data to database via room:Caused by: android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed 具有唯一索引的房间数据库迁移问题 - Room Database Migration Issue with Unique Index "将房间数据库中的唯一约束添加到多列" - add unique constraint in room database to multiple column 房间数据库:NOT NULL 约束在删除时失败 - Room database: NOT NULL constraint failed at deletion 尽管 autoGenerate=true,但主键的房间唯一约束失败 - Room unique constraint failed for primary key despite autoGenerate=true 在 Android Room 中使用 @Upsert 时出现“UNIQUE constraint failed” - Getting "UNIQUE constraint failed" when using @Upsert in Android Room
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM