首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Room 持久化库

使用@Database注解,并满足以下条件 是抽象类,并且继承自RoomDatabase 在注解中包含与数据库关联实体列表包含一个具有0个参数抽象方法,并返回用@Dao注解类。...在编译时,Room会知道是查询用户表所有。如果查询包含语法错误或者数据库中不存在这个表。Room会在编译时报错并给出错误信息。 将参数传递给查询 大部分时候查询都是需要过滤参数。...很多时候只需要数据实体中几个。...所以我们可以创建一个只包含需要类。...如果作者类引用另一个表(如Books),则应用程序效率会进一步降低。 要使用Room同时引用多个实体,需要创建一个包含每个实体POJO,然后编写一个查询来加入相应表。

3.9K70

Android架构组件Room使用详解

Room其实就是一个orm,抽象了SQLite使用,但是它作为Android亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错。...:runtime:1.0.0" annotationProcessor "android.arch.persistence.room:compiler:1.0.0" } 定义数据表实体类 班级表 @...(); //要引用外键 String[] parentColumns(); //要关联 String[] childColumns(); //当父类实体(关联外键表)从数据库中删除时执行操作...id , firstName , street , state , city , 和 post_code 注意 :嵌入式字段还可以包含其他嵌入式字段 如果一个实体具有相同类型多个内嵌字段,则可以通过设置前缀属性...总结 以上所述是小编给大家介绍Android架构组件Room使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

JetPack--Room数据库

JetPack提供了Room数据库,和GreenDAO等开源库一样,在SQLite做了封装 Room主要使用三个注解: 1.Entity:实体类,对应一张表 2.Dao:包含操作表一些方法 3.Database...需要满足:定义类是一个继承RoomDatabase抽象类,注解中定义包含实体列表包含一个没有参数抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...' 定义一个实体类,在class上使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里数据转化为实体类,对于其他我们代码里使用构造方法,可以使用@Ignore注解表示Room...、数据库版本、是否输出日志 使用单例模式时,构造方法不能私有化,因为Room内部会调用构造方法 定义获取Dao对象抽象函数 package com.aruba.room; import android.content.Context...我们在使用@Database注解时exportSchema指定为true,那么每次升级时,都会导出一个Schema文件,里面包含数据库创建信息,方便排查问题 同时我们也需要在gradle里指定下导出文件夹位置

1.5K20

Jetpack之Room使用,结合Flow

testImplementation "androidx.room:room-testing:$room_version" } 主要组件 数据库:包含数据库持有者,并作为应用已保留持久关系型数据底层连接主要接入点...使用 @Database注释类应满足以下条件: 是扩展 RoomDatabase 抽象类。 在注释中添加与数据库关联实体列表。...Entity:表示数据库中表。 DAO:包含用于访问数据库方法。 应用使用 Room 数据库来获取与该数据库关联数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中表列相对应值。...room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义android { ...

1K20

上手使用 Room Kotlin API

Room 是 SQLite 封装,它使 Android 对数据库操作变得非常简单,也是迄今为止我最喜欢 Jetpack 库。...每个类成员对应表中。列名和类型与类中每个字段名称和类型一致。如果您希望改变列名而不使用类中变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...: 数据库、一个用于标识我们是否正处于事务中变量、一个需要监听数据库表列表 (在本例中列表里只有 word_table) 以及一个 Callable 对象。...Callable.call() 包含需要被触发查询实现代码。...将 Word 作为需要存储实体元素传入,数值 1 作为数据库版本。 我们还会定义一个抽象方法,该方法返回一个 WordDao 对象。

1.5K10

room使用-以demo为例

' compile 'android.arch.lifecycle:runtime:1.0.0-alpha5' compile 'android.arch.persistence.room..." //数据库迁移时候使用 compile "android.arch.persistence.room:testing:1.0.0-alpha5" 在项目的build.gradle...注解定义实体列表,类内容定义从数据库中获取数据对象(DAO)。它也是底层连接主要入口。 这个被注解类是一个继承RoomDatabase抽象类。...当一个用户更新了app最新版本之后,你并不希望它们丢失所有的现有数据,尤其是当你无法通过远程服务器恢复这些数据时候。 Room让你可以让你写Migration类来保存用户数据。...其他 json转化成实体是否与entity冲突 并不冲突,写一个测试方法: public static void gsonTest(){ Gson gson = new Gson();

2.2K30

【Jetpack】ORM 数据库访问框架 Room 简介 ( 对象关系映射 ORM 概念简介 | Room 框架组成部分 - 实体、数据库访问对象、数据库持有者 | Room 框架使用步骤 )

一、对象关系映射 - ORM / Object Relational Mapping ---- Android 系统中使用数据库是 SQLite 关系型数据库 , 使用 Android 提供 api...修饰类 , 该类必须继承 RoomDatabase 抽象类 ; 在该注解中 , 需要定义 数据库 相关 实体列表 ; 数据库持有者 包含 没有参数抽象方法 , 该方法返回 Dao 对象 ;..., Entity 实体类 , 三者之间关系如下 : 首先 , 在 Android 应用中 , 通过 Room 框架 Database 拿到 数据库持有者 对象 ; 然后 , 通过 数据库持有者 Database..." } androidx.room:room-runtime 依赖库 是 运行时核心依赖库 , 在应用运行时提供 Room 框架数据库相关核心功能 ; 该依赖库 包含Room 持久化库核心功能...; Dao 数据库访问对象实现类 , 用于执行 SQL 查询和操作 ; 实体类 Entity 映射器 , 用于将数据库中数据映射到实体类中 ; androidx.room:room-ktx 依赖库

1.6K20

Android Jetpack - Room

然后,在设备重新联机后,任何用户启动内容更改都会同步到服务器 Room 三个主要部分包括 Database 包含数据库持有者,并作为应用程序持久关系数据基础连接主要访问点。...使用@Database注释类应满足以下条件: 继承了 RoomDatabase 抽象类 在注解中包含与数据库相关联实体列表 包含一个无参抽象方法,并返回使用 @Dao 注释类。...DAO 包含用于访问数据库方法 该应用程序使用 Room 数据库来获取与该数据库关联数据访问对象或 DAO。...然后,应用程序使用每个 DAO 从数据库中获取实体,并将对这些实体任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据库中表列对应Room 组件关系图 ?.../reference/android/arch/persistence/room/OnConflictStrategy

1.9K70

学习|Android JetPack组件---ORM框架Room使用

Room 包含 3 个主要组件: 数据库:包含数据库持有者,并作为应用已保留持久关系型数据底层连接主要接入点。...使用 @Database 注释类应满足以下条件: 是扩展 RoomDatabase 抽象类。 在注释中添加与数据库关联实体列表包含具有 0 个参数且返回使用 @Dao 注释抽象方法。...Entity:表示数据库中表。 DAO:包含用于访问数据库方法。 应用使用 Room 数据库来获取与该数据库关联数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体所有更改保存回数据库中。最后,应用使用实体来获取和设置与数据库中表列相对应值。 Room 不同组件之间关系图 ?...varary里arr:Product是可变参数,可以列入多个,当然可以再复写一个List方法,直接传入列表也可以。

1.1K20

【Jetpack】使用 Room Migration 升级数据库 ( 修改 Entity 实体类 - 更改数据模型 | 创建 Migration 迁移类 | 修改数据库版本 | 代码示例 )

(1, 2) 即可 ; 从 数据库版本 1 升级为 数据库版本 3 , 先执行 Migration(1, 2) , 再执行 Migration(2, 3) ; Room 提供了简便方式来 处理 Android...2、Migration 迁移工具使用步骤 在 Room 中使用 Migration 迁移工具 升级数据库步骤 : 更新数据模型 : 如果要 更改数据库结构 , 更新 Entity 实体类 , 修改实体类就是修改数据库表结构..., 应用程序可以无缝地将旧版本数据库迁移到新版本,而不会丢失现有的数据。...default 1 表示新默认值为 1 ; 当插入新行时 , 如果没有显式提供 “sex” 值 , 将使用默认值 1 ; 3、修改数据库版本 数据库版本 在 RoomDatabase 抽象实现类...实体类修改后完整代码 Entity 实体类中加入新数据库字段 sex 字段 ; 完整代码 : package kim.hsl.rvl import androidx.room.ColumnInfo

81330

【Jetpack】使用 Room 框架访问 Android 平台 SQLite 数据库 ( 导入依赖 | 定义 Entity 实体类 | 定义 Dao 数据库访问对象接口 | 定义数据库实例类 )

; plugins { id 'com.android.application' } 如果使用 Kotlin 语言开发 , 需要在 android 插件 基础上 额外导入 kotlin 和...:room-compiler:2.2.5' 2、定义 Entity 实体类 使用 Room 框架 应用中 , Entity 实体类 对应着 数据库表 , 将 Entity 实体类 定义完成后 , 就意味着...数据库表结构 已经定义完成 ; @Entity 注解 Entity 实体类 需要使用 @Entity 注解进行修饰 , 该注解可以 传入 tableName 参数 , 该 tableName 参数作用是定义数据库表名称...使用 @ColumnInfo 注解定义 , 该注解中参数 : name = “id” 定义了 数据表列名称 ; typeAffinity = ColumnInfo.INTEGER 定义该 字段类型是...import androidx.room.Ignore import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 和 对鹰实体

33830

深入探讨 Room 2.4.0 最新进展

现在 Room 支持了自动迁移,让我们通过两个示例来对比手动迁移和自动迁移: 修改表名 假设有一个包含两个表数据库,表名分别是 Artist 和 Track,现在想要将表名 Track 改为 Song...在上面的示例中,自动迁移无法直接处理重命名表中某一,因为 Room 在进行自动迁移时,会遍历两个版本数据库 schema,通过比较来检测两者之间更改。...在处理或者表重命名时,Room 无法明确发生了什么更改,此时可能有两种情况,是删除后新添加?还是进行了重命名?处理或者表删除操作时也会有同样问题。...在 Room 内部,如果存在自动迁移,它们将自动添加到需要运行和验证迁移列表中。...MapInfo 注解使您可以灵活地使用特定,而不是整个 data 类从而进行更加自定义映射。 其他优势 关系查询方法另一个好处是支持更多数据操作,可以通过这个新功能来支持分组、筛选等功能。

1.5K00

上手使用 Room Kotlin API

Room 是 SQLite 封装,它使 Android 对数据库操作变得非常简单,也是迄今为止我最喜欢 Jetpack 库。...每个类成员对应表中。列名和类型与类中每个字段名称和类型一致。如果您希望改变列名而不使用类中变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...: 数据库、一个用于标识我们是否正处于事务中变量、一个需要监听数据库表列表 (在本例中列表里只有 word_table) 以及一个 Callable 对象。...Callable.call() 包含需要被触发查询实现代码。...将 Word 作为需要存储实体元素传入,数值 1 作为数据库版本。 我们还会定义一个抽象方法,该方法返回一个 WordDao 对象。

95330

Jetpack组件之Room

:2.2.6" 相关概念 Room主要包含三个组件: 数据库:包含数据库持有者,作为应用已保留持久关系型数据底层连接主要接入点。...使用@Database注解类应满足以下条件: 是扩展RoomDatabase抽象类。 在注释中添加与数据库关联实体列表包含具有0个参数且返回使用@Dao注释抽象方法。...Entity:表示数据库中表。 DAO:包含用于访问数据库方法。 应用使用 Room 数据库来获取与该数据库关联数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中表列相对应值。Room架构图如图所示。...此支持在Entity两个实例被视为相等(如果这两个实例包含相同值)时尤为有用。

1.8K20

【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应数据库文件 | 预填充数据库表字段属性必须一致 )

一、Room 预填充数据简介 在 Android 中使用 Room 框架 , 创建 SQLite 数据库时 , 有时需要预填充一些数据 , 这些数据一般都是来自 assets 资源目录 ; 如果用户首次打开应用...实体类代码 , 在 DB Browser for SQLite 工具中 , 创建 student 表字段 ; 打开 DB Browser for SQLite 工具 , 选择 " 文件 / 新建数据库...| 临时数据库表重命名 ) 基础上 , 添加了 由 DB Browser for SQLite 工具制作 预填充数据 文件 ; 1、Entity 实体类代码 该实体类中 , 暂时只保留 id ,...androidx.room.Ignore import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 和 对鹰实体类 *...android.content.Context import android.util.Log import androidx.room.Database import androidx.room.Room

43920

MVVM数据持久化(一)——ROOM集成

而且还可以和RxJava配合使用十分契合。 Room有3个主要组件 Database: 包含数据库持有者,并充当与应用程序持久化、关系型数据底层连接主要访问点。...用@Database注解类应满足以下条件: 是一个继承RoomDatabase抽象类。 在注释中包含与数据库相关联实体列表包含一个具有0个参数抽象方法,并返回用@Dao注释类。...DAO: 包含用于访问数据库方法。 以及这三者之间关系图: ?...三者关系图 加入依赖 以上简单介绍了一下Room 下面我们着重介绍如何在我们框架当中使用 首先加入依赖 implementation 'android.arch.persistence.room...我们需要创建一个AppDatabase,这个类是包含了所以Entity以及操作他们DAO。

1.5K20

Android 原生 SQLite 数据库一次封装实践

一、背景 毫无疑问,关于Android数据库现在已经有很多流行好用ORM框架了,比如:Room、GreenDao、DBFlow等都提供了简洁、易用API,尤其是谷歌开源Room是目前最主流框架...因此感觉可以将数据库操作以网络请求方式进行抽象和封装,其详细对比如下表所示: 通过上述相似性对比并综合现有ORM框架来考虑切入口,首先想到是使用注解: 主流Room使用是编译时注解(更有利于性能...> converter = null; if (Queryable.class.isAssignableFrom(rawType)) { //返回单个实体对象 //其他处理逻辑...extends Queryable>) responseType); } else if (rawType == List.class) { //返回一个实体列表 //其他处理逻辑.../+/android-room-release:room/compiler/src/main/kotlin/androidx/room/processor/ https://techblog.bozho.net

91410

【Jetpack】Room销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )

一、销毁 和 重建策略 在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 , 如 : 涉及到 修改 数据库表字段数据类型 , 需要逐个修改数据库值...= true) abstract class StudentDatabase: RoomDatabase() { 4、修改实体类数据类型 将 Entity 实体类 Student 类中 sex 字段...import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 和 对鹰实体类 * 设置该数据类对应数据库中一张数据表,...类 RoomDatabase 数据库类完整代码 package kim.hsl.rvl import android.content.Context import android.util.Log...import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 和 对鹰实体类 * 设置该数据类对应数据库中一张数据表,

30040

【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

json 格式文件 , 其中包含如下内容 : 版本信息 : 包括 当前版本 和 目标版本 ; 创建表语句 : 包括 新增 定义 和 字段信息 ; 删除表语句 : 包括 需要删除名称 ;...; Schema 文件是 描述 Room 数据库结构文件 , 通过该文件 , 可以 很方便地开发者了解数据库历史变更记录 , 方便排查问题 ; Schema 文件 定义了数据库中表、、索引等元素结构..., 并包含了创建和升级数据库 SQL 脚本 ; 使用 Room Migration 升级数据库 , 生成 Schema 文件方式通常是通过 Gradle 构建脚本中 roomExportSchema...android / defaultConfig / javaCompileOptions / annotationProcessorOptions " 层级中 arguments 中 , 配置 "room.schemaLocation...": "$projectDir/schemas".toString() 参数 ; 完整配置层级如下 : android { namespace 'kim.hsl.rvl' compileSdk

29210
领券