如何将 Room 中的空字段类型迁移为文本?
现在我面临这个问题:
java.lang.IllegalStateException:迁移未正确处理 data_table
预期:TableInfo{name='data_table', columns=
url=列{name='url',类型='文本', notNull=假,
主键位置=0}.....
找到:TableInfo{name='data_table', columns=url=Column{name='url',type='', notNull=false, PrimaryKeyPosition=0}.....
我尝试过使用 UNDEFINED typeAffinity,但这没有效果。
问题是在创建表时,创建者没有明确指示该列。有两种方法可供选择来解决该问题。
-
您可以在迁移过程中创建一个新数据库,并将所有旧数据复制到新数据库中。像这样。
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 使用您最喜欢的数据库管理器或终端将表迁移到具有显式列类型的新表。然后将新数据库放入您的项目中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)