Android Room的用法

SQLite是Android内置的轻量级关系型数据库,但直接使用SQLite core包做数据库操作有以下劣势:需要编写长且重复的代码,这会很耗时且容易出错。

管理SQL困难,特别对于复杂的数据库结构。

Room是在这样的背景下应运而生。Room充当现有SQLite API的抽象层。 SQLiite API所有必需的包,参数,方法和变量都使用简单的注释Annotation来表示。相应的Annotation如下:@Entity:数据模型类,对应数据库的表

@Dao:使用一个接口类来表示Dao(Data Access Object)

@Database:使用此注释的类会创建一个抽象的Dao

@PrimaryKey:标识属性为表的主键

@Insert:插入到表的数据

@Update:更新到表数据

@Delete:删除表的数据

@Query:执行SQL查询

下面以一个示例讲解下Room的用法。

1、在build.gradle文件中添加gradle依赖关系。implementation “android.arch.persistence.room:runtime:1.0.0”

annotationProcessor “android.arch.persistence.room:compiler:1.0.0”

2、创建数据库表的数据模型类@Entity

public class Movies {

@NonNull

@PrimaryKey

private String movieId;

private String movieName;

public Movies() {

}

public String getMovieId() { return movieId; }

public void setMovieId(String movieId) { this.movieId = movieId; }

public String getMovieName() { return movieName; }

public void setMovieName (String movieName) { this.movieName = movieName; }

}

其中@PrimaryKey标记movieId为主键。

3、创建Dao类,并且添加CRUD对应的抽象方法。@Dao

public interface DaoAccess {

@Insert

void insertOnlySingleMovie (Movies movies);

@Insert

void insertMultipleMovies (List moviesList);

@Query (“SELECT * FROM Movies WHERE movieId = :movieId“)

Movies fetchOneMoviesbyMovieId (int movieId);

@Update

void updateMovie (Movies movies);

@Delete

void deleteMovie (Movies movies);

}

@Query自定义了查询的SQL。

4、实现Database类@Database (entities = {Movies.class}, version = 1, exportSchema = false)

public abstract class MovieDatabase extends RoomDatabase {

public abstract DaoAccess daoAccess() ;

}

此Database类扩展与RoomDatabase,它提供了daoAccess()的抽象方法。

5、在Activity或Fragment类中为Database类声明和初始化对象。private static final String DATABASE_NAME = “movies_db”;

private MovieDatabase movieDatabase;

movieDatabase = Room.databaseBuilder(getApplicationContext(),

MovieDatabase.class, DATABASE_NAME)

.fallbackToDesctructiveMigration()

.build();

初始的步骤完成。 通过使用数据库对象,可以执行数据库管理的所有功能。

插入代码示例:new Thread(new Runnable() {

@Override

public void run() {

Movies movie =new Movies();

movie.setMovieId( “2”);

movie.setMovieName(“芳华”);

movieDatabase.daoAccess () . insertOnlySingleMovie (movie);

}

}) .start();

建议:使用Thread,AsyncTask来执行数据库操作。

Android Room的用法相关教程

android room表关联,Android Room的用法相关推荐

  1. android room表关联,如何在首次运行时填充Android Room数据库表?

    我尝试了许多方法可以做到这一点,每个没有提供. 首先,我尝试使用'addMigrations'方法向Room中添加Migration实现,但发现它只在数据库升级期间运行,但不在创建时运行. 然后,我尝 ...

  2. android 自定义表单,Android实现Ant Design 自定义表单组件

    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...

  3. PostgresSql 多表关联删除语句

    最近用PostgresSql数据库进行多表关联删除的操作,在写sql语句的时候遇到了问题: DELETE s.* FROM student s,classroom c WHERE s.cid = c. ...

  4. PostgreSQL 多表关联删除

    用PostgreSQL数据库删除某个表数据 student,需要关联多个表(如classroom)作为条件,以下语句走不通: delete s.* from student s,classroom c ...

  5. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  6. android 生成多个表单,Android根据word模板文档将表单数据生成word文档的方案整理...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: poi 解析doc文件可 ...

  7. android switcher控件,Android ViewSwitcher 的功能与用法

    ViewSwitcher 代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitch ...

  8. 【Android 逆向】Android 逆向通用工具开发 ( Android 逆向通用工具组成部分 | 各模块间的关联 )

    文章目录 一.Android 逆向通用工具组成部分 二.Android 逆向通用工具 各模块间的关联 一.Android 逆向通用工具组成部分 Android 逆向通用工具 肯定是跨平台的 , 涉及到 ...

  9. 【Flutter】Flutter 混合开发 ( 关联 Android 工程与 Flutter 工程 | 安卓页面中嵌入 Flutter 页面 | 安卓中启动 Flutter 页面 )

    文章目录 前言 一.创建 Android 项目 二.关联 Android 工程与 Flutter Module 工程 1.配置 Flutter Module工程 2.配置 build.gradle 3 ...

最新文章

  1. jwt怎么获取当前登录用户_spring oauth2如何获取当前登录用户信息
  2. windows adb shell 乱码
  3. Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置。
  4. mysql怎么改字体编码_mysql怎么改字符编码?
  5. 什么比日期和时区更难? SQL / JDBC中的日期和时区!
  6. DrawImage内存不足问题
  7. Centos7 解决Docker拉取镜像慢的问题
  8. selenium动态网页爬虫复习
  9. 研旭至尊板——F28335知识点总结①
  10. 冯.诺依曼计算机结构要点
  11. 英语口语笔记B1-Unit04.家居生活-02-Buying household products
  12. loadrunner icrosoft Visual c++2005 sp1 提示命令行选项语法错误,键入“命令/?”
  13. python文件的用法_关于.py文件的详细介绍
  14. 十二星座日期、性格、特性查询表
  15. 202312读书笔记|《赶时间的人》——灰暗的从前会成为照亮未来的光,艰难的生活里,诗歌是那陡峭的另一面
  16. 一、团队建设能力在管理中的应用(注重协作)
  17. 小圣求职记B:总集篇
  18. 5G 安全评估流程指南
  19. libgdx, couldn't load shared library 'gdx' for target: Linux, 32-bit的终极解决方案
  20. 计算机辅助机床,计算机辅助机床造型设计.pdf

热门文章

  1. 小米公司开源 MIUI 6 第三方适配工具 『Patchrom』
  2. 安徽省淮南市谷歌卫星地图下载
  3. 在华为云服务器上用WP搭建公司官网
  4. 【四足机器人那些事】足端轨迹规划(一)
  5. msm8996平台的一些debug方法
  6. 白杨SEO:如何用百度好看视频排名优化来做视频营销?
  7. 洛谷 P1073 最优贸易 (分层图状态转移+SPFA,求最长路径;另附某dalao的超短代码:暴力+动规)
  8. 王煜全:AI独角兽必须进行业务升级 否则必死无疑
  9. 前端性能优化的七种方法
  10. Chrome浏览器输入不安全站点,没有继续前往链接--解决方案thisisunsafe