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

java.lang.IllegalStateException: Migration didn't properly handle table

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

现在我正面临这个问题:

java.lang.IllegalStateException: Migration didn't properly handle data_table

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

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

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

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

  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 您使用您最喜欢的数据库管理器或终端将 table 迁移到具有显式列类型的新 table。然后将新数据库放入您的项目中。