Realm 升級資料庫,為表新增新的Field遇到的異常記錄

風吹過wu發表於2018-09-28

在使用Realm資料庫管理的時候,需要對一個表新增field。當時是想的是設定預設值就出錯了。錯誤程式碼如下

if (!schema.hasField("cultureSwitch")) {
            schema.addField("cultureSwitch", Boolean.class).setNullable("cultureSwitch", true);
        }
複製程式碼

異常以資訊:

java.lang.IllegalStateException: Field is already nullable: cultureSwitch

看字面資訊是該field已經是nullable。那我就去掉設定預設值的程式碼試試

 if (!schema.hasField("cultureSwitch")) {
            schema.addField("cultureSwitch", Boolean.class);
        }
複製程式碼

天不遂人願,又報錯了

io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors: - Property 'SpeechSettingRealmBean.cultureSwitch' has been made required.

得,現在又是說該field是required.那好嘛,我又接著改

 if (!schema.hasField("cultureSwitch")) {
            schema.addField("cultureSwitch", Boolean.class).setRequired("cultureSwitch", true);
        }
複製程式碼

這次終於大功告成了。

後面又再嘗試了另外一種方式,如下:

if (!schema.hasField("cultureSwitch")) {
            schema.addField("cultureSwitch", boolean.class);
        }
複製程式碼

同樣也是可以的,這個就有必要深究了。

查了stackOverFlowd發現:

  • boolean.class : 是可nullable

  • Boolean.class : 是required

備註:realm版本是5.4.0

PS-人的一生可能會遇到很多喜歡的人,但是心疼的只會有一個

相關文章