2017-05-30 9 views
1

roomの使用方法については、データベースのバージョンを更新した後にわかりません。Android版永続ライブラリ - データベースのバージョンを変更する方法

@Database(entities = {Event.class}, version = 1) 
@TypeConverters(DateTypeConverter.class) 
public abstract class EventDatabase extends RoomDatabase { 

    public abstract EventDao eventDao(); 

} 

をして、それは次のようになりますように、私は今のバージョンを変更します:

@Database(entities = {Event.class}, version = 2) 
@TypeConverters(DateTypeConverter.class) 
public abstract class EventDatabase extends RoomDatabase { 

    public abstract EventDao eventDao(); 

} 

私が見たとき

は例えば、私はもともと部屋で定義されている次のデータベースを持っていたと言うことができますバージョンを変更すると、データベースの列が追加または削除された可能性がありますので、同じではありません。私の質問は次のとおりです:

私は今、2つのデータベースを維持する必要がありますか? v1とv2?エンティティをv2に簡単にコピーする方法はありますか?バージョンを変更するだけで1から2に変更するだけで十分ですか、たとえばEventDatabase2という別のクラスを作成する必要がありますか? android.arch.persistence.room:runtime:1.0.0-alpha1

+1

https://developer.android.com/topic/libraries/architecture/room.html#db -migration – CommonsWare

答えて

2

は、だから私は、新しいアプリのバージョンと新しいデータベースのバージョンを持って言うことができます:

もここで私が使用している部屋のバージョンです。ここで重要なことは、移民政策が提供されていない場合、それは思えるある

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name") 
     .addMigrations(MIGRATION_1_2).build(); 

static final Migration MIGRATION_1_2 = new Migration(1, 2) { 
    @Override 
    public void migrate(SupportSQLiteDatabase database) { 
     database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, " 
       + "`name` TEXT, PRIMARY KEY(`id`))"); 
    } 
}; 

@Database(entities = {Event.class}, version = 2) 
@TypeConverters(DateTypeConverter.class) 
public abstract class EventDatabase extends RoomDatabase { 

    public abstract EventDao eventDao(); 

} 

し、このように移行ポリシーを提供します。私は単にこのような= 2バージョンを変更する必要がありますデータベース全体が再構築されます(したがって、ユーザーはすべての以前のデータを失います)。

これは@commonsWareアップデートlinkを提供しています。

+0

しかし、この[documentation](https://developer.android.com/training/data-storage/room/migrating-db-versions.html)は、明示的にt帽子の移動ですべてのデータが消去されません。 _必要な移行を行っていない場合は、データベースが再構築されます。つまり、データベース内のすべてのデータが失われます._ – Yoda066

+0

これは既に私の回答。 – j2emanue

+0

申し訳ありませんが、私はそれを誤読している必要があります。 – Yoda066

0

別のオプション: あなたのDBスキーマの変更後にデータベースのバージョン番号を更新することができ、あなたがしたくない場合は、同時に、あなたのデータベースオブジェクトの構築にfallbackToDestructiveMigration()メソッドを使用することができますが常に移行トレースを提供することをお勧めしますが、移行プランを提供し、ちょうど必要な変更を適用するには:

@Provides 
@Singleton 
fun provideCryptocurrenciesDatabase(app: Application): Database = Room.databaseBuilder(app, 
    Database::class.java, "my_db").fallbackToDestructiveMigration().build() 
関連する問題