java.lang.IllegalStateException:迁移没有正确处理表

时间:2017-10-16 11:57:29

标签: android android-room android-architecture-components

如何将空字段类型迁移到Room中的文本?

现在我正面临这个问题:

  

java.lang.IllegalStateException:迁移未正确处理data_table

     

预期:TableInfo {name ='data_table',columns =   url =列{name ='url', type ='TEXT',notNull = false,   primaryKeyPosition = 0} .....

     

找到:TableInfo {name ='data_table',columns = url = Column {name ='url',    type ='',notNull = false,primaryKeyPosition = 0} .....

我尝试过使用UNDEFINED typeAffinity,但这没有效果。

1 个答案:

答案 0 :(得分:0)

问题是创建表时,创建者没有明确指出该列。 有两种方法可以解决问题。

  1. 您可以在迁移期间创建新数据库,并将所有旧数据复制到新数据库中。像这样。

    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            // Create the new table
            database.execSQL(
                    "CREATE TABLE data_table_new (url TEXT");
            // Copy the data
            database.execSQL(
                    "INSERT INTO data_table_new url SELECT url FROM data_table");
            // Remove the old table
            database.execSQL("DROP TABLE data_table");
            // Change the table name to the correct one
            database.execSQL("ALTER TABLE data_table_new RENAME TO data_table");
        }
    };
    
  2. 但是使用大型数据库时效率很低。所以我用第二种方式。

    2您使用您喜欢的数据库管理器或终端将表迁移到具有显式列类型的新表。然后将新数据库放入项目中。