Android开发技术之——使用ROOM数据库

第一、添加相应依赖

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

dependencies {
      def room_version = "2.2.5"

      implementation "androidx.room:room-runtime:$room_version"
      annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

      // optional - Kotlin Extensions and Coroutines support for Room
      implementation "androidx.room:room-ktx:$room_version"

      // optional - RxJava support for Room
      implementation "androidx.room:room-rxjava2:$room_version"

      // optional - Guava support for Room, including Optional and ListenableFuture
      implementation "androidx.room:room-guava:$room_version"

      // Test helpers
      testImplementation "androidx.room:room-testing:$room_version"
    }

第二、创建相应类

Entity实体,Dao,Database
在对应类中使用@Entity标注

@Entity
public class Task{
	@PrimaryKey(autoGenerate = true)//主键自增
    private int id;
}
@Dao
public class Task{
	 @Query("SELECT * FROM TASK ORDER BY deadlineTime ASC")
    LiveData<List<Task>> getAllTasks();

    @Query("SELECT * FROM TASK WHERE ID = :id")
    LiveData<List<Task>> getTaskById(int id);

    @Insert
    void insertTasks(Task... task);

    @Update
    void updateTasks(Task... tasks);

    @Delete
    void deleteTasks(Task... tasks);
}
@Database(entities = {Task.class},version = 1,exportSchema = false)
public abstract class TaskDataBase extends RoomDatabase {

    //该类对象
    private static TaskDataBase INSTANCE;

    //这是一个创建该类对象的静态方法,以后创建该类对象都使用这个方法,以确保使用的是同一个对象
    static synchronized  TaskDataBase getDatabase(Context context){
        if(INSTANCE == null){
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(),TaskDataBase.class,"ComponentDatabase").build();
        }
        return  INSTANCE;
    }

    public abstract TaskDao getTaskDao();
}

第三、创建仓库类,方便管理

需要注意的是,增删改的操作需要在多线程内部类中进行

public class TaskRepository {

    private LiveData<List<Task>> allTasksLive;
    private TaskDao taskDao;

    public TaskRepository(Context context){
        TaskDataBase taskDataBase = TaskDataBase.getDatabase(context.getApplicationContext());
        taskDao = taskDataBase.getTaskDao();
        allTasksLive = taskDao.getAllTasks();
    }

    //获取全部
    LiveData<List<Task>> getAllTasksLive(){
        return allTasksLive;
    }

    //增
    void insertTasks(Task...tasks){
        new  InsertAsyncTask(taskDao).execute(tasks);
    }

    //多线程内部类
    //增
    static class InsertAsyncTask extends AsyncTask<Task,Void,Void> {
        //需要一个数据库成员变量
        private TaskDao taskDao;
        //构造方法,获取数据库对象
        public InsertAsyncTask(TaskDao taskDao){
            this.taskDao = taskDao;
        }
        //这个是在后台线程中执行的方法,形参列表即在调用该类对象的excute方法时传递
        @Override
        protected Void doInBackground(Task... tasks) {
            //将component插入
            taskDao.insertTasks(tasks);
            return null;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值