Room 是 Android Jetpack 组件库中的一部分,它是用于在 Android 应用中进行本地数据库访问和管理的库。Room 提供了一个抽象层,使开发者能够更轻松地访问 SQLite 数据库,并且可以在不直接使用 SQL 语句的情况下进行数据库操作。
Room 主要包括三个主要组件:
通过使用 Room,开发者可以更加方便地进行数据库操作,同时也能够避免直接操作 SQL 语句所带来的风险。
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
@Entity
注解创建表示数据库表的实体类,并使用@PrimaryKey
注解指定主键。
@Entity
public class User {
@PrimaryKey
public int id;
public String name;
public int age;
}
@Dao
注解创建数据访问对象接口,定义数据库操作方法。
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAllUsers();
@Insert
void insertUser(User user);
@Delete
void deleteUser(User user);
}
@Database
注解创建数据库类,并在其中定义数据库版本号和实体类与DAO接口的关联。
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
//查询所有用户信息
db.userDao().getllUsers();
「Room升级」
fallbackToDestructiveMigration()
方法或者编写具体的数据库升级逻辑来实现数据库的升级。「Room降级」
fallbackToDestructiveMigration()
方法或者编写具体的数据库降级逻辑来实现数据库的降级。在Android中使用Room进行数据库升级和降级可以通过数据库版本号来实现。
在进行数据库升级时,只需修改数据库版本号,并提供数据库升级的回调函数:
@Database(entities = {User.class}, version = 2)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// 在此处执行数据库升级的操作
}
};
}
在进行数据库降级时,需要提供数据库降级的回调函数,并指定fallbackToDestructiveMigration
为true
:
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
static final Migration MIGRATION_2_1 = new Migration(2, 1) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// 在此处执行数据库降级的操作
}
};
}
在进行升级和降级操作时,需要注意数据迁移的问题,确保数据能够正确地从旧版本迁移到新版本或者从新版本迁移到旧版本。