環境?
Android studioで言語はJavaを使ってるよ
発端
初めに何も考えずにRoomsでデータベース作った時,適当なサイトを参考にしてこんな感じでexport_schema=false
を設定してしまった
@Database(entities = {My_Entity.class}, version = 1, export_schema=false)
public abstract class My_Table extends RoomDatabase {
public abstract My_Dao My_Dao();
}
事の発端はこれ.
問題
このあと何やかんやあって,Entityの仕様を大幅変更した.(カラムの削除と追加をやりたい放題した)
そのあと,シンタックスエラーだけ直してもう一度ビルドしたところ当然のように様々なエラーにであう.
↓例
その1
Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.
テーブルの中身変えたでしょ!バージョン上げなさいよね!
と怒られているので自動でmigrationしてくれないかな〜という期待も込めて次のように書き換え.
@Database(entities = {My_Entity.class}, version = 2, export_schema=false, autoMigrations = {@AutoMigration (from = 1, to = 2)})
public abstract class My_Table extends RoomDatabase {
public abstract My_Dao My_Dao();
}
その2
Schema export directory is not provided to the annotation processor so we cannot import the schema. To generate auto migrations, you must provide `room.schemaLocation` annotation processor argument AND set exportSchema to true.
export_schema=falseにしてたら前のバージョンが見れないでしょ!Migrationするならtrueにしときなさいよね!
と怒られているので,(あれ,falseの設定のままテーブルの中身書き換えちゃったよな..?)と嫌な予感をさせながら書き換え.
@Database(entities = {My_Entity.class}, version = 2, autoMigrations = {@AutoMigration (from = 1, to = 2)})
public abstract class My_Table extends RoomDatabase {
public abstract My_Dao My_Dao();
}
その3
Migration didn't properly handle ...
Expected: ...
はい,嫌な予感が的中しました!
バージョン1をexport_scemeしないまま書き換えてしまったせいで,元のデータテーブルを構成することができずMigrationはもはや機能しません!!!!
対処
幸い,データテーブルには引き継ぎたいデータがまだ全くなかったので,一回データテーブルを消してまっさらにして作り直すことにしました.
データテーブルの所在するActivity内で以下を実行するだけ
public class MainActivity extends AppCompatActivity{
this.getApplicationContext().deleteDatabase("消したいテーブル名");
まっさらになるので,もう一度version=1にして作り直すことが可能に!
もうexport_schema=false
なんてしない...