Android Jetpack组件-Room增删改

这是我参与 8 月更文挑战的第 12 天,活动详情查看: 8月更文挑战

背景

在项目中不可避免的使用数据库, 而三方框架又是五花八门, 在这中我就选择了google Jetpack组件中的Room
上篇文章 简单介绍了一下room怎么创建数据库和数据表, 这篇就简单介绍对数据表的基本操作

创建Dao

在room中Dao是一个接口, 通过@Dao注解进行修饰

@Dao
public interface TestDao {
}
复制代码

添加数据

  • 通过@Insert注解指定方法为添加数据方法, 默认处理模式为忽略当前数据

由于在添加时有可能是一条数据,也有可能是一组数据,所以在这用的是可变数组

@Insert
void add(TestEntity... entities);
复制代码
  • 更改添加数据模式

刚才说了通过@Insert注解指定方法默认忽略当前数据, 如果有需求需要替换怎么做呢

通过指定@Insert注解的onConflict来解决
OnConflictStrategy.REPLACE:如果有老的数据存在则会进行替换,如果没有就插入
OnConflictStrategy.ROLLBACK:如果有老的数据存在则会回滚事物,如果没有就插入
OnConflictStrategy.ABORT:如果有老的数据存在则会终止事物,如果没有就插入
OnConflictStrategy.FAIL:如果有老的数据存在则会提示插入数据失败,如果没有就插入
OnConflictStrategy.IGNORE:如果有老的数据存在则忽略当前数据,如果没有就插入
用法如下

@Insert(onConflict = OnConflictStrategy.REPLACE)
void add(TestEntity... entities);
复制代码

删除数据

通过@Delete注解指定方法为删除数据方法

@Delete
void delete(TestEntity... entities);
复制代码

更新数据

通过@Update注解指定方法为更新数据方法

@Update
void update(TestEntity... entities);
复制代码

调用逻辑

  • AppDatabase中定义Dao对应的方法
public abstract TestDao testDao();
复制代码
  • 定义Dao接口对应的实现类为单例, 并获取AppDatabase对象
public class TestRepo {
    private static TestRepo sInstance;

    private final AppDatabase mDatabase;

    private TestRepo(final AppDatabase database) {
        mDatabase = database;
    }

    public static TestRepo getInstance() {
        if (sInstance == null) {
            synchronized (TestRepo.class) {
                if (sInstance == null) {
                    AppDatabase database = AppDatabase.getInstance();
                    sInstance = new TestRepo(database);
                }
            }
        }
        return sInstance;
    }
}
复制代码
  • 封装方法,并调用Dao中对应的增删改的方法

由于在Dao中add定义的为可变数组, 所以在Dao实现类中会创建两个方法, 一个为单条数据, 一个为多条数据, 以便调用

以下仅为 添加方法的样例, 删除和修改类似

public void addResults(TestEntity entity) {
    mDatabase.testDao().add(entity);
}

public void addResults(List<TestEntity> entities) {
    int size = entities.size();
    TestEntity[] amHeartRateEntities = new TestEntity[size];
    for (int i = 0; i < size; i++) {
        amHeartRateEntities[i] = entities.get(i);
    }
    mDatabase.testDao().add(amHeartRateEntities);
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享