我正在使用 Realm v 0.85.0 在我的一个项目中尝试我的第一次 Realm 迁移。我正在从 v 0.84.0 迁移,但迁移也应该适用于早期版本。我遵循了文档中链接到的https://github.com/realm/realm-java/tree/master/examples/migrationExample/src/main中的示例。
在此迁移中,我尝试添加两个新表。为了添加每个新表,我的迁移代码如下所示:
public class Migration implements RealmMigration {
@Override
public long execute(Realm realm, long version) {
if (version == 0)
{
Table newTableOne = realm.getTable(NewTableOne.class);
newTableOne.addColumn(ColumnType.STRING, "columnOne");
// Add any other needed columns here and repeat process for NewTableTwo
// Rest of migration logic goes here...
version++;
}
return version;
}
}
根据Migration on Realm 0.81.1,如果表不存在,getTable() 方法将自动创建表。我认为这不是问题,但我只是为了完整性而将其包括在内。
我还尝试向现有表中添加几个新列,并在这些新列上设置默认值。为此,我使用以下代码:
Table existingTable = realm.getTable(ExistingTable.class);
existingTable.addColumn(ColumnType.BOOLEAN, "newColumnOne");
existingTable.addColumn(ColumnType.INTEGER, "newColumnTwo");
// Any other new columns needed here
long newColumnOneIndex = getIndexForProperty(existingTable, "newColumnOne");
long newColumnTwoIndex = getIndexForProperty(existingTable, "newColumnTwo");
for (int i = 0; i < existingTable.size(); i++)
{
userTable.setBoolean(newColumnOneIndex, i, false);
userTable.setLong(newColumnTwoIndex, i, 5);
}
getIndexForProperty 方法直接从 Github 上的示例中提取,如下所示:
private long getIndexForProperty(Table table, String name) {
for (int i = 0; i < table.getColumnCount(); i++) {
if (table.getColumnName(i).equals(name)) {
return i;
}
}
return -1;
}
运行此迁移时,我收到一个 RealmMigrationNeededException,指出“字段计数不匹配 - 预期为 22,但为 23”。我查看了 StackOverflow 并通过 Google 和 Github wiki 进行了一些研究,但无法找到与此确切的“字段计数不匹配”消息相关的任何信息。
我已确保每个模型类中的每个新字段都有一个 addColumn 行,并且我的模型中的字段不会比我添加的列多,反之亦然。
您能提供的任何帮助将不胜感激。