Android的Room库可以自动创建迁移,只需要在每次更改数据库结构时,更新Room数据库的版本号即可。下面是一个包含代码示例的解决方法:
dependencies {
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
}
@Entity
注解标记:@Entity(tableName = "users")
public class User {
@PrimaryKey
public int id;
public String name;
}
@Database
注解标记:@Database(entities = {User.class}, version = 2)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
@Query
注解定义数据库操作:@Dao
public interface UserDao {
@Query("SELECT * FROM users")
List getUsers();
@Insert
void insertUser(User user);
}
public class MyApp extends Application {
private AppDatabase appDatabase;
@Override
public void onCreate() {
super.onCreate();
appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "my-database")
.fallbackToDestructiveMigration()
.build();
}
public AppDatabase getAppDatabase() {
return appDatabase;
}
}
MyApp
类获取Room数据库实例,并进行数据库操作:AppDatabase appDatabase = ((MyApp) getApplicationContext()).getAppDatabase();
UserDao userDao = appDatabase.userDao();
List users = userDao.getUsers();
当你更改数据库的结构(例如添加或删除表,更改表中的列等)时,只需要在AppDatabase的@Database
注解中增加版本号,Room库会自动创建迁移脚本。如果设置了fallbackToDestructiveMigration()
,则会自动销毁旧版本的数据库,创建新版本的数据库。如果没有设置该方法,Room库会尝试根据数据库的变化自动执行迁移脚本。
请注意,自动迁移功能只适用于一些简单的数据库结构变化,对于复杂的数据库迁移,可能需要手动编写迁移脚本。