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 时,创建者没有明确指出该列。
有两种方法可以选择解决问题。
您可以在迁移过程中创建一个新的数据库,并将所有旧数据复制到新数据库中。像这样。
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。然后将新数据库放入您的项目中。
如何将空白字段类型迁移到 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 时,创建者没有明确指出该列。 有两种方法可以选择解决问题。
您可以在迁移过程中创建一个新的数据库,并将所有旧数据复制到新数据库中。像这样。
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。然后将新数据库放入您的项目中。