2

我正在使用 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 行,并且我的模型中的字段不会比我添加的列多,反之亦然。

您能提供的任何帮助将不胜感激。

4

0 回答 0