添加依赖项

添加 Room 依赖项
在项目的 build.gradle 文件中添加 Room 的依赖项:

dependencies {
def room_version = "2.4.2"
implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
}

添加 Kotlin 支持(如果使用 Kotlin)

如果项目使用 Kotlin,需要添加 Kotlin kapt 插件和相关依赖项:

plugins {
id 'kotlin-kapt'
}

dependencies {
kapt "androidx.room:room-compiler:$room_version"
    implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
}

创建实体类

定义实体类
实体类对应数据库中的一张表。使用 @Entity 注解标记这个类,并为每个属性添加 @ColumnInfo 注解(可选)。

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "users")
public class User {
   @PrimaryKey(autoGenerate = true)
   private int id;

    @ColumnInfo(name = "name")
    private String name;

    @ColumnInfo(name = "age")
    private int age;

    // 必须提供无参构造函数
    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and Setters

}

创建数据访问对象(DAO)

定义 DAO 接口
DAO 接口用于定义访问数据库的方法。使用 @Dao 注解标记这个接口,并为每个操作添加相应的方法。

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import androidx.room.Delete;

@Dao
public interface UserDao {
    @Query("SELECT \* FROM users")
    LiveData<List<User>> getAllUsers();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUser(User user);

    @Update
    void updateUser(User user);

    @Delete
    void deleteUser(User user);

    @Query("SELECT * FROM users")
    List<ImsiModel> caseAll();
}

创建数据库类

定义数据库类
创建一个抽象类,继承自 RoomDatabase,并使用 @Database 注解标记这个类。

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();

    private static volatile AppDatabase instance;

    public static AppDatabase getInstance(Context context) {
        if (instance == null) {
            synchronized (AppDatabase.class) {
                if (instance == null) {
                    instance = Room.databaseBuilder(context.getApplicationContext(),
                            AppDatabase.class, "app_database")
                            .allowMainThreadQueries()
                            .build();
                }
            }
        }
        return instance;
    }

}

初始化数据库

获取数据库实例
在应用程序中,使用 Room.databaseBuilder() 方法创建一个数据库实例。

AppDatabase database = AppDatabase.getInstance(context);

使用数据库

插入数据
使用 DAO 接口的方法插入数据。

调用插入语句:userDao.insertUser(new User("John Doe", 25));

UserDao userDao = database.userDao();
new Thread(() -> {
userDao.insertUser(new User("John Doe", 25));
}).start();

查询数据

使用 DAO 接口的方法查询数据。

调用查询语句:usersLiveData = userDao.getAllUsers();


LiveData<List<User>> usersLiveData = userDao.getAllUsers();
usersLiveData.observeForever(users -> {
// 处理用户列表
});

Android Room 数据库查询语句

查询所有数据:@Query("SELECT \* FROM users")
LiveData<List<User>> getAllUsers();

根据 ID 查询单个用户:@Query("SELECT \* FROM users WHERE id = :userId")
User getUserById(int userId);

模糊查询、排序查询、分页查询、聚合查询、连接查询等。
使用事务
在 Android Room 数据库中使用事务可以通过以下步骤实现:

获取数据库实例。开始事务。执行数据库操作。标记事务成功(可选)。结束事务。
数据库迁移策略

增加数据库版本号。创建迁移类。在数据库构建器中添加迁移。处理无法迁移的情况。测试迁移。使用 MigrationTestHelper 进行迁移测试。避免数据丢失。保持迁移过程简单且快速。定期检查和更新迁移策略。
相关组织和人物

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐