目录

Room 的使用三角色介绍:

使用步骤:

使用准备:

使用:


Room 的使用三角色介绍:

  1. @Entity(数据库表  与  类相似);
  2. @Dao (操作引擎,用于操作数据库)
  3. @Database(创建数据库)

使用步骤:

使用准备:

  1. 导入依赖:(在 bulid.gradle 文件)中导入,(导入的本处版本只是举例,可在官网出查找其他版本)

    dependencies {def room_version = "2.4.2"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"
    }
  2. 结合Rxjava使用额外添加相关依赖:
     dependencies {...// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"// optional - Guava support for Room, including Optional and ListenableFutureimplementation "androidx.room:room-guava:$room_version"// optional - Test helperstestImplementation "androidx.room:room-testing:$room_version"// optional - Paging 3 Integrationimplementation "androidx.room:room-paging:2.5.0-alpha01"
    }

使用:

  1. @Entity  创建 数据库表(与 类对象相似):

    package com.example.androidapp.SQlist;import androidx.room.Entity;
    import androidx.room.PrimaryKey;@Entity(tableName = "Agency")
    public class Agency implements Serializable {@PrimaryKey(autoGenerate = true)private int id;private String agency_name;private String agency_nowTime;private String agency_futureTime;private String agency_okTime;private String agency_type;private String agency_nowstate;private String agency_context;public Agency(String agency_name, String agency_nowTime, String agency_futureTime,String agency_type, String agency_nowstate, String agency_context) {this.agency_name = agency_name;this.agency_nowTime = agency_nowTime;this.agency_futureTime = agency_futureTime;this.agency_type = agency_type;this.agency_nowstate = agency_nowstate;this.agency_context = agency_context;} public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAgency_name() {return agency_name;}public void setAgency_name(String agency_name) {this.agency_name = agency_name;}public String getAgency_nowTime() {return agency_nowTime;}public void setAgency_nowTime(String agency_nowTime) {this.agency_nowTime = agency_nowTime;}public String getAgency_futureTime() {return agency_futureTime;}public void setAgency_futureTime(String agency_futureTime) {this.agency_futureTime = agency_futureTime;}public String getAgency_type() {return agency_type;}public void setAgency_type(String agency_type) {this.agency_type = agency_type;}public String getAgency_nowstate() {return agency_nowstate;}public void setAgency_nowstate(String agency_nowstate) {this.agency_nowstate = agency_nowstate;}public String getAgency_context() {return agency_context;}public void setAgency_context(String agency_context) {this.agency_context = agency_context;}public String getAgency_okTime() {return agency_okTime;}public void setAgency_okTime(String agency_okTime) {this.agency_okTime = agency_okTime;}@Overridepublic String toString() {return "Agency{" +"id=" + id +", agency_name='" + agency_name + '\'' +", agency_nowTime='" + agency_nowTime + '\'' +", agency_futureTime='" + agency_futureTime + '\'' +", agency_type='" + agency_type + '\'' +", agency_nowstate='" + agency_nowstate + '\'' +", agency_context='" + agency_context + '\'' +'}';}
    }
  2. @Dao 操作数据库
    package com.example.androidapp.SQlist;import androidx.room.Dao;
    import androidx.room.Delete;
    import androidx.room.Insert;
    import androidx.room.Query;
    import androidx.room.Update;import java.util.List;
    @Dao
    public interface AgencyDao {@Insertvoid insertAgencies(Agency... agencies);@Updatevoid updateAgencies(Agency... agencies);@Deletevoid deleteAgencies(Agency... agencies);@Query("SELECT * FROM Agency ORDER BY ID DESC")List<Agency> getAllAgency();
    }
  3. @Database 创建 数据库 并与 数据表 关联:暴露Dao给用户操作数据库
    package com.example.androidapp.SQlist;import android.content.Context;import androidx.room.Database;
    import androidx.room.Room;
    import androidx.room.RoomDatabase;//数据库 关联 之前的表 数据库信息
    //,User.class
    @Database(entities = {Agency.class},version = 1,exportSchema = false)
    public abstract class AgencyDatabase extends RoomDatabase {//    暴露 dao 给用户操作 数据库public abstract AgencyDao getAgencyDao();//    单例模式 返回 dbprivate static AgencyDatabase INSTANCE;static synchronized AgencyDatabase getInstance(Context context){if (INSTANCE == null){INSTANCE = Room.databaseBuilder(context.getApplicationContext(),AgencyDatabase.class,"Agency_database").build();}return INSTANCE;}
    }
    
  4. 创建 一个 DBclass 用于实现 在异步操作 中进行数据操作(这里我用了AsyncTask进行异步操作)
    package com.example.androidapp.SQlist;import android.content.Context;
    import android.os.AsyncTask;import java.util.ArrayList;
    import java.util.List;public class DBEngine {//    接收 传入的 AgencyDao 对象private AgencyDao agencyDao;//    接收 传入的 UserDao 对象private UserDao userDao;//    接收 获取的所有数据 实现单例private static List<Agency> allAgencies = new ArrayList<>();private static List<User> allUsers = new ArrayList<>();//    实现 构造方法public DBEngine(Context context) {AgencyDatabase agencyDatabase = AgencyDatabase.getInstance(context);agencyDao = agencyDatabase.getAgencyDao();UserDatabase userDatabase = UserDatabase.getInstance(context);userDao = userDatabase.getUserDao();};//*********************************************************************************************//    插入 操作public void insertAgencies(Agency... agencies) {
    //        开启 InsertAsyncTask 线程new InsertAsyncTask(agencyDao).execute(agencies);}//    更新 操作public void updateAgencies(Agency... agencies) {new UpdateAsyncTask(agencyDao).execute(agencies);}//    删除 操作public void deleteAgencies(Agency... agencies) {new DeleteAsyncTask(agencyDao).execute(agencies);}//    获取 操作public void getAllAgencies(Agency... agencies) {new GetAllAgencies(agencyDao).execute();}
    //*********************************************************************************************
    //Agency//    实现 插入功能private static class InsertAsyncTask extends AsyncTask<Agency, Void, Void> {//        获取 AgencyDao 对象private AgencyDao dao;//        实现 构造方法public InsertAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}//        实现 AgencyDao 操作@Overrideprotected Void doInBackground(Agency... agencies) {dao.insertAgencies(agencies);return null;}}//    实现 更新功能private static class UpdateAsyncTask extends AsyncTask<Agency, Void, Void> {private AgencyDao dao;public UpdateAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}@Overrideprotected Void doInBackground(Agency... agencies) {dao.updateAgencies(agencies);return null;}}//    实现 删除功能private static class DeleteAsyncTask extends AsyncTask<Agency, Void, Void> {private AgencyDao dao;public DeleteAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}@Overrideprotected Void doInBackground(Agency... agencies) {dao.deleteAgencies(agencies);return null;}}//    实现 获取所有数据 功能private static class GetAllAgencies extends AsyncTask<Void, Void, List<Agency>> {private AgencyDao dao;public GetAllAgencies(AgencyDao agencyDao) {dao = agencyDao;}//        获取数据@Overrideprotected List<Agency> doInBackground(Void... voids) {allAgencies = dao.getAllAgency();return allAgencies;}//        返回 数据@Overrideprotected void onPostExecute(List<Agency> agencies) {super.onPostExecute(agencies);allAgencies = agencies;}}
  5. 在主类 中 实例化 一个DB 对象,都数据进行操作
        //        获取 数据库引擎private DBEngine dbEngine;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbEngine = new DBEngine(this);dbEngine.getAllAgencies();//      实例化 一个 Agency 对象Agency new_agency = new Agency(name, nowTimeStr, futureTimeStr, typeStr, stateStr, contextStr);//    插入 操作dbEngine.insertAgencies(new_agency );//    更新 操作dbEngine.updateAgencies(new_agency );//    删除 操作dbEngine.deleteAgencies(new_agency );//    获取 操作dbEngine.getAllAgencies(new_agency );}  

项目案例:

苏苏待办:

github:        GitHub - susihao/Agency: 苏苏待办

Android Room框架使用相关推荐

  1. Android View框架的measure机制

    Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure)Android View框架的measure机制 http://www.cnblogs.com/xyh ...

  2. 5个最佳的Android测试框架

    2019独角兽企业重金招聘Python工程师标准>>> 谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM / ...

  3. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  4. android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...

    Android图片框架photoview如何记住状态并还原,包括缩放度,缩放后的移动的距离等等,尝试了好多方法都没有作用. private void generateImages() { for (i ...

  5. Android 数据库框架ormlite 使用精要

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  6. Android 插件框架机制之Small

    Android 插件框架机制系列文章: Android 插件框架机制之预热篇 Android 插件框架机制之DroidPlugin 引言 上一篇文章提到过Small,这次就简单说一下Small,这只是 ...

  7. Android开源框架——图表MPAndroidChart

    开源官网:https://github.com/PhilJay/MPAndroidChart Android开源框架--图表MPAndroidChart 特点 配置 图表类型 Demo MPAndro ...

  8. Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告

    原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...

  9. Android开源框架源码鉴赏:Fresco

    文章目录 一 图片加载流程 1.1 初始化Fresco 1.2 获取DataSource 1.3 绑定DraweeController与DraweeHierarchy 1.4 从内存缓存/磁盘缓存/网 ...

  10. Android开源框架源码鉴赏:Okhttp

    文章目录 一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterce ...

最新文章

  1. python【蓝桥杯vip练习题库】BASIC-21Sine之舞(递归 递推)
  2. 安装阴阳师出现错误“选择的驱动器或UNC共享不存在或不能访问“怎么解决?
  3. 半轴CVJ(constant velocity joint)
  4. display:inline-block的深入理解(转)
  5. 问题 1073: 弟弟的作业
  6. Android--Handler使用应运及消息机制处理原理分析
  7. 两个服务器之间怎么传输大量数据速度快 java socket_千兆网络的传输速度能超过125MB/s么?...
  8. NIPS 又!放!票!了!
  9. 表格如何excel在线转letex
  10. No module named ‘gym‘
  11. 华中科技大学计算机二级成绩,华中科技大学2017年计算机水平测试(软考)报名通知...
  12. 乒乓球基本站姿站位和步伐
  13. 如何从GitHub上面下载Java项目,并用IDEA导入该项目跑起来?
  14. 吴恩达 tensorflow
  15. 工作十年之感悟 -- 兼谈生活与人生
  16. 计算机提示无法验证发布者,win7系统取消“无法验证发布者”提示框的操作技巧...
  17. 提高抗打击能力_如何提高心理承受能力或者抗打击能力?
  18. Repeater用法(
  19. Unable to make field private final byte[] java.lang.String.value accessible: module java.base does n
  20. 笙默考试管理系统——学员

热门文章

  1. 【小技巧】一招教你下载b站视频到本地
  2. python判断一个字符串在数组中的位置
  3. java开发-微信支付
  4. Java题-古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
  5. PCB板常用检测方法
  6. scanner练习:BMI计算
  7. 质量管理三个概念:QC、QA和QM,你能分得清吗?
  8. android opengl 简书,Android OpenGL入门
  9. 流行的权限管理 gem devise的定制
  10. 感受野(receptive filed)