- 在migrate()方法中執(zhí)行SQL語句新增某字段時,該字段不能為BOOLEAN類型的乙漓,需要用 INTEGER 替換级历,如果不指定默認值,則系統(tǒng)默認為1也就是true叭披,但是在寫表Model 實體時寥殖,時可以定義Boolean類型的變量的,Room會自己轉(zhuǎn)化為INTEGER。
深坑!! 表里是BOOLEAN類型,但是SQL語句需要用INTEGER
- 新增某字段類型為 String 時嚼贡,在migrate()方法中執(zhí)行SQL語句熏纯,該字段用 TEXT 類型進行聲明
- 假設(shè)新增ctTime 字段的類型是int 或 long,在表UserModel 實體里粤策, , 則在migrate()方法中執(zhí)行SQL語句的時候ctTime 聲明需為 INTEGER 類型樟澜,并且要加上 NOT NULL DEFAULT 0 ,如:"ALTER TABLE UserModel ADD COLUMN ctTime INTEGER NOT NULL DEFAULT 0" 掐场,
如果不加 NOT NULL 則會報這個異常:java.lang.IllegalStateException: Migration didn't properly handle UserModel ,因為Room會默認根據(jù)你的數(shù)據(jù)實體UserModel來創(chuàng)建該字段的notNull=true往扔,所以必須加上。
如果不加 DEFAULT 0 則會報這個異常:android.database.sqlite.SQLiteException: Cannot add a NOT NULL column with default value NULL (code 1):