gradle依赖:

// add for room
implementation "android.arch.persistence.room:runtime:1.1.1"
// room 配合 RxJava
implementation "android.arch.persistence.room:rxjava2:1.1.1"
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'// RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.3'

model对象:

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;@Entity
public class User {// 用 @ColumnInfo 来标明数据库表的列名, 用 @PrimaryKey 来标示 主键@PrimaryKey(autoGenerate = true)private long    uid;private String  name;private String  address;private String  phone;private Integer age;public long getUid() {return uid;}public void setUid(long uid) {this.uid = uid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" + "uid=" + uid + ", name='" + name + '\'' + ", address='" + address + '\'' + ", phone='" + phone + '\'' + ", age=" +age + '}';}
}

相对应的DAO类:

  1. Room也可以返回RxJava2PublisherFlowable:
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import java.util.List;import io.reactivex.Flowable;@Dao
public interface UserDao {@Insert(onConflict = OnConflictStrategy.REPLACE)List<Long> insert(User... users);@Query("SELECT * from user")Flowable<List<User>> loadUser();@Deletevoid delete(User user);
}

当准备好所有的 Model 和 DAO 后,我们就需要把它放入 DataBase 的管理中:

package com.soyoungboy.room.database;import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;import com.soyoungboy.room.database.daos.BookDao;
import com.soyoungboy.room.database.daos.UserDao;
import com.soyoungboy.room.database.entities.Book;
import com.soyoungboy.room.database.entities.User;@Database(entities = {User.class, Book.class}, version = 3)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {public abstract UserDao userDao();public abstract BookDao bookDao();}

Converters.java为时间转换的类:

  1. 如果想要在数据库中存储Date,可以存储等价的Unix时间戳
public class Converters {@TypeConverterpublic static Date fromTimestamp(Long value) {return value == null ? null : new Date(value);}@TypeConverterpublic static Long dateToTimestamp(Date date) {return date == null ? null : date.getTime();}
}

Room数据库数据库升级:

  1. Room使用Migration来实现数据库的迁移。每个Migration都指定了startVersionendVersion
import android.app.Application;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.migration.Migration;public class AppApplication extends Application {private AppDatabase mAppDatabase;@Overridepublic void onCreate() {super.onCreate();mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db").allowMainThreadQueries().addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();}public AppDatabase getAppDatabase() {return mAppDatabase;}/*** 数据库版本 1->2 user表格新增了age列*/static final Migration MIGRATION_1_2 = new Migration(1, 2) {@Overridepublic void migrate(SupportSQLiteDatabase database) {database.execSQL("ALTER TABLE User ADD COLUMN age integer");}};/*** 数据库版本 2->3 新增book表格*/static final Migration MIGRATION_2_3 = new Migration(2, 3) {@Overridepublic void migrate(SupportSQLiteDatabase database) {database.execSQL("CREATE TABLE IF NOT EXISTS `book` (`uid` INTEGER PRIMARY KEY autoincrement, `name` TEXT , `userId` INTEGER, 'time' INTEGER)");}};
}

操作数据库:

1,首先获取AppDatabase对象:

AppDatabase mAppDatabase = ((AppApplication)getApplication()).getAppDatabase();

2,新增操作:

                User user = new User();user.setPhone("18320770932");user.setAddress("深圳");user.setName("soyoungboy");//              user.setAge("28");List<Long> ids = mAppDatabase.userDao().insert(user);

3,查询操作:

                mAppDatabase.userDao().loadUser().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<List<User>>() {@Overridepublic void accept(List<User> entities) {if (entities != null) {for (User user : entities) {Log.d("soyoungboy", user.toString());}}}});

4,删除操作:

 findViewById(R.id.button_delete_user).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {User user = new User();user.setPhone("18320770932");user.setAddress("深圳");user.setName("soyoungboy");user.setUid(5);UserDao userDao = mAppDatabase.userDao();userDao.delete(user);}});

Android 架构 -- Room相关推荐

  1. Android架构篇-5 CI/CD(持续集成、持续交付、持续部署)

    Android架构篇-5 CI/CD(持续集成.持续交付.持续部署) CI CI是指持续集成,代码的更新会定期自动构建.测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持 ...

  2. Android架构篇-4 架构模式MVVM

    Android架构篇-4 架构模式MVVM MVVM原理 #mermaid-svg-CJmTYPxP5GkKNMic .label{font-family:'trebuchet ms', verdan ...

  3. Android架构篇-3 网络接口封装

    Android架构篇-3 网络接口封装 实现功能: 1.暴露参数请求地址url.请求方法method.请求参数params.请求头header.请求响应response.https请求证书 2.支持g ...

  4. Android架构篇-1 项目组织架构

    Android架构篇-1 项目组织架构 模块化分层 1.结构清晰,各模块代码分离,符合高内聚低耦合,快速定位查找代码 2.团队协作开发灵活,互不影响,各模块完成后合并即可完成整体app 3.抽离公共层 ...

  5. Android架构篇-2 国际化多语言

    Android架构篇-2 国际化多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文 4.我的->设置->切换语言 思路:app首次初始设置为系统语言,用户在a ...

  6. 如何成为一名Android架构师,乃至高级架构师,文末有路线图

    很多Android的小伙伴在做了多年的开发之后,始终搞不清楚达到Android架构师需要何种技能,我们对比着Android高级工程师来说明. 我们先来看一下Android高级工程师的招聘要求 职位描述 ...

  7. Android架构纵横谈之二—基于性能的考虑(1)

    By LiAnLab.org / 宋宝华 <Android架构纵横谈之一--软件自愈能力>已经谈地告了一个段落.接下来这个系列二我们谈Android性能方面的考虑.Android系 统组件 ...

  8. Android架构详解

    Android系统架构由5部分组成,分别是:Linux Kernel.Android Runtime.Libraries.Application Framework.Applications.第二部分 ...

  9. android 启动白屏_为什么说Android 架构的未来是 MVVM?

    据<第45次中国互联网络发展状况统计报告>,2019年市场上监测到的APP数量比2018年减少85万款- 这两年,很多朋友都会有这样的疑惑: "现在Android的坑还值不值得入 ...

  10. Android架构思考(模块化、多进程)

    Android架构思考(模块化.多进程) Dec 28, 2016| Android | 4777 Hits 15条评论 关于模块化(组件化)这个问题,我想每个开发者可能都认真的思考过.随着项目的开发 ...

最新文章

  1. 在Ubuntu 14.04 64bit上搭建单机本地节点Spark 1.3.0环境
  2. C++_STL标准库——容器
  3. Verilog 流水线加法器
  4. 济南申请计算机软件著作权需要的材料
  5. JNI实现源码分析【四 函数调用】
  6. OpenCASCADE:拓扑 API之特征
  7. Java面试题 实现单例设计模式(懒汉、饿汉)
  8. 她弯着头说的7pyx 2013
  9. 关于Linux SHELL 的编程的几个练习(课本182页5-10题)
  10. linux常用知识命令
  11. CentOS7搭建本地yum源之http服务
  12. python 广义线性模型_scikit-learn 1.1 广义线性模型(Generalized Linear Models)
  13. php重构求圆柱圆锥的体积,圆锥的体积 - 彭阳县第二小学数学教研社区 - 宁夏教育云...
  14. 万凯新材深交所上市破发:募资超30亿 公司市值101亿
  15. android sdcard下创建文件,android创建以及使用SDcard镜像文件
  16. shiro 集成swagger,anon不生效问题
  17. Portrait Photography: Ten Styles with One Light 人像摄影:一种风格的十种风格 Lynda课程中文字幕
  18. Object 的 equal() 、hashCode()方法说起
  19. 转载:软件天才与技术民工
  20. 应用安全技术趋势之 Top 5

热门文章

  1. c语言删除文件中的数据_第20问:删除了数据文件,该往哪个方向逃跑
  2. 在html中写typescript,5分钟上手TypeScript
  3. java 实现二叉树操作
  4. Activity、View、Window、DecorView的关系
  5. Java数据结构与算法:排序算法
  6. Pytorch 怎么构建自己的数据集。怎么重写官方数据集。
  7. 后处理安装_你所不了解的国六后处理
  8. 论文排版中页码的设置方法
  9. git commit -amend_Github标星3W+,这份Git飞行规则你值得拥有
  10. linux arm 常用服务,ARM、linux常用服务器+交叉编译工具链