首页
学习
活动
专区
圈层
工具
发布

Jetpack组件之Room

使用@Database注解的类应满足以下条件: 是扩展RoomDatabase的抽象类。 在注释中添加与数据库关联的实体列表。 包含具有0个参数且返回使用@Dao注释的类的抽象方法。...Room支持全文搜索,通过使用@Fts3(仅在应用程序具有严格的磁盘空间要求或需要与较旧的SQLite版本兼容时使用)或@Fts4添加到Entity来实现。Room版本须高于2.1.0。...需要注意的是:启用Fts的表必须使用Integer类型的主键,且列名为“rowid”。 如果表支持以多种语言显示内容,可以使用languageId指定用于存储每一行语言信息的列。...有时候,数据库中的某些字段必须是唯一的,可以通过@Index注解的unique属性设为true,强制实施此唯一属性。如上代码所示可防止name和age同组值的两行。...将带有@AutoValue 注释的类用作实体时,可以使用 @PrimaryKey、@ColumnInfo、@Embedded 和 @Relation 为该类的抽象方法添加注释。

2.5K20

如何用 Room 处理一对一,一对多,多对多关系?

正好通过此文详细了解 @Relation 注解的使用。 将数据拆分为相关联的表,并以有意义的方式将数据组合在一起 是设计关系型数据库的重要部分。...@Relation 注解时,Room 根据被注解的属性类型来推断使用哪个实体类。...例如,到目前为止,我们给 Dog 或 List 添加了注解,这就告诉了 Room 要使用哪个类,要查询哪些字段。 如果我们想返回一个其他对象,例如 Pup,它不是一个实体但是包含了一些字段。...请记住,SQLite 外键定义索引,并且可以具有级联触发器来更新或删除表中的条目。因此,请根据是否希望在数据库中使用这种功能来决定是否要使用外键。...无论你需要一对一,一对多,还是多对多的支持,Room 都可以通过 @Relation 注释满足你。

4.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入探讨 Room 2.4.0 的最新进展

    对于 Room 2.4.0 版本之前的数据库迁移,您需要实现 Migration 类,并在其中编写大量复杂冗长的 SQL 语句,来处理不同版本之间的迁移。这种手动迁移的形式,非常容易引发各种错误。...在 Room 内部,如果存在自动迁移,它们将自动添加到需要运行和验证的迁移列表中。...使用 @Relation 如果使用 @Relation 和 @Embedded 反应该映射关系,则有如下代码: data class ArtistAndSongs( @Embedded...而 @Relation 中并不支持过滤、排序、分组或组合键,其设计初衷也是用于数据库中只有一些简单的关系,虽然受限于关系结果,但这是一种快速完成较简单任务的便捷方法。...在本例中,涉及到一对多的映射关系,其中单个音乐人映射到一个歌曲集合。

    1.9K00

    Jetpack Room 从入门到精通

    概述 Room 是 Google 推出的 Android 官方持久化库,它在 SQLite 的基础上提供了一个抽象层,极大地简化了数据库操作。...@Entity (实体类) 代表数据库中的一张表。 使用 @Entity 注解标记一个数据类。 类中的每个属性(字段)默认对应表中的一列。...@Dao (数据访问对象) 包含用于访问数据库的方法(增删改查)。 使用 @Dao 注解标记一个接口或抽象类。 DAO 是 Room 的核心,所有数据库操作都通过 DAO 完成。...@Database (数据库) 作为持久化数据的底层连接的主要访问点。 必须是一个抽象类,并继承自 RoomDatabase。...1.使用建议 Room 通过注解和编译时代码生成,极大地简化了 Android 上的 SQLite 操作。

    18310

    Jetpack Room 从入门到精通

    概述Room是Google推出的Android官方持久化库,它在SQLite的基础上提供了一个抽象层,极大地简化了数据库操作。...@Entity(实体类)代表数据库中的一张表。使用@Entity注解标记一个数据类。类中的每个属性(字段)默认对应表中的一列。...@Dao(数据访问对象)包含用于访问数据库的方法(增删改查)。使用@Dao注解标记一个接口或抽象类。DAO是Room的核心,所有数据库操作都通过DAO完成。...1.使用建议Room通过注解和编译时代码生成,极大地简化了Android上的SQLite操作。...利用编译时检查:Room会在编译时报错,及时修复SQL语法错误。考虑数据量:对于超大数据集,考虑分页加载。使用@Transaction:确保多个数据库操作的原子性。

    21610

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

    能力的同时允许流畅的数据库访问,最主要的是它让SQLiteDatabase的使用变得简单,大大减少了重复的代码,并且把SQL查询的检查放在了编译时。...用@Database注解的类应满足以下条件: 是一个继承RoomDatabase的抽象类。 在注释中包含与数据库相关联的实体列表。 包含一个具有0个参数的抽象方法,并返回用@Dao注释的类。...即使只有一个field,你也必须用@PrimaryKey注释这个field。如果你想让Room为entity设置自增ID,你可以设置@PrimaryKey的autoGenerate属性。...要为一个entity添加索引,在@Entity注解中添加indices属性,列出你想放在索引或者组合索引中的字段。 有时候,某个字段或者几个字段必须是唯一的。...这种情况下,你可以使用@Embedded注解,表示你想把一个对象分解为表的子字段。然后你就可以像其它独立字段那样查询这些嵌入的字段。

    1.8K20

    Android Room 持久化库

    默认 Room 会为 每个字段在表中创建对应的字段;如果其中一些属性不想被创建在表中怎么办,那就是使用 @Ignore 注解此属性。完成实体的创建之后必须在 Database 引用。...如果参数是 一个数组和集合就会返回一个long类型的数组或集合。...Room 也会验证方法的返回值,如果返回对象中的字段名称和查询响应中的字段名字不匹配, Room 会通过以下方式给出提示 如果只有一些字段名称不匹配,会发出警告 如果没有字段名称匹配,会发出错误。...所以 Room 会生成正确的代码。如果查询返回的列多了或者少了,Room会给出警告 这里也可以使用@Embedded注解 传递参数集合 有时候查询的参数数量是动态的,只有运行的时候才知道。...例如只查询某些地区的用户。 当参数是一个集合的时候,Room 会在运行的时候自动扩展它。

    4.7K70

    Android Architecture Components Part1:Room

    至于为何要使用本地数据库,自然是当用户无网络或者网络差的时候,能够更好的提高用户对我们App的体验。 添加依赖 在使用Room之前,我们还是要在项目中对其进行依赖添加。...其中@ColumnInfo也可以通过(name = "name")来命名字段名。当然还有别的注释例如外键的标明:@ForeignKey DAO 数据库表建好了,现在是提供操作数据表中的数据的方法。...要注意它必须为interface,在接口中我们只需定义接口方法即可。与平常的接口方法定义不同的是,我们必须在每一个接口方法上通过注释来标明该方法的作用。...例如getAllContacts()方法,我们为了让它实现获取contacts表中的所有数据,我们需要在其方法中添加@Query注释,由于是查询方法,自然是使用Query,如果是插入方法就是Insert...本质是ContactsDao_Impl实现了ContactsDao接口。 Room的强大之一是:它可以在编译时检测你的SQL语句是否编写正确,如果编写错误将导致编译失败。

    1K20

    使用 Kotlin Symbol Processing 1.0 缩短 Kotlin 构建时间

    在过去的几个月里,KSP 共发布了 32 个版本,超过 162 个来自社区反馈的错误问题被修复。如果您正期待着应用该工具,那现在是时候去尝试了。...KSP 是使用 Kotlin 进行注释处理的新一代工具: 它将大幅提高 Kotlin 开发者的构建速度,而且不同于 KAPT,该工具提供了对 Kotlin/Native 和 Kotlin/JS 的支持。...但是创建这些存根的成本很高,这意味着编译器必须多次解析程序中的所有符号 (一次生成存根,另一次完成实际编译)。 KSP 不使用存根生成模型,而是作为 Kotlin 编译器插件运行。...处理器实现的小型 test-processor 库 使用库: 显示如何在实际 Kotlin 项目中使用构建器处理器的 workload 目录 如果您是应用开发者,请查看 支持库列表 以及 快速入门 指南...使用带 KSP 的 Moshi 或 Room 如果您在项目中使用 Moshi 或 Room,您只需快速修复模块的构建文件即可体验 KSP。

    4.2K10

    Android Jetpack - Room

    使用@Database注释的类应满足以下条件: 继承了 RoomDatabase 的抽象类 在注解中包含与数据库相关联的实体类列表 包含一个无参抽象方法,并返回使用 @Dao 注释的类。...在运行时,你可以通过调用 Room.databaseBuilder()或 Room.inMemoryDatabaseBuilder()来获取 Database 实例 Entity 数据库中的表...DAO 包含用于访问数据库的方法 该应用程序使用 Room 数据库来获取与该数据库关联的数据访问对象或 DAO。...,并被 @PrimaryKey 注释作为主键,此处 @ColumnInfo 的作用是给此参数取一个别名 c_word ,该别名会被真实的记录于数据库的字段中,如果在同一张表中存在多个可能重复的字段时例如...类型,经过注册之后,无论是修改或者删除,都会立刻被 Observer 感知并通知 UI 更新列表 完整示例代码 https://github.com/realskyrin/jetpack_room

    2.3K70

    Android Room数据库版本迁移的实战

    前言 最近一直在做一款Android的新产品,所以更新的文章基本都是Android相关,主要是产品中的应用的东西及一些笔记,新产品中Android本地数据库要存放的东西还挺多的,所以这篇是专门针对Android...如果您只想让 Room 在特定情况下回退到破坏性重新创建,可以使用 fallbackToDestructiveMigration() 的一些替代选项: 如果特定版本的架构历史记录导致迁移路径出现无法解决的问题...下面是t_Dev_Cfg的表,表中原来的主键是ipadr的IP地址字段,后来因为需要修改IP后,主键要改为dev_serialno这一列了,所以在类中先将原来ipadr上面的特征标签@PrimaryKey...,所以只能自己测试,先说重点: 创建视图脚本中的视图名格式必须是:`视图名` 就是这原因导致测试了好多次一直升级不成功,新建一个名为VTest的视图,直接放代码: package ryb.medicine.database.bean.view...var id: Long ) 创建视图的迁移脚本: /** * 注:如果是视图增加视图中前后必须加上`视图名`,否则升级失败。

    2.4K20

    【ES三周年】elasticsearch 常用数据类型详解和范例

    ,布尔类型的查询不能使用0或者1代替,否则会抛出异常#在使用布尔类型字段时需要注意的是,布尔类型的查询不能使用0或者1代替,否则会抛出异常POST myindex-2_03/_doc/3?...Elasticsearch中的日期类型可以时包含日期格式的字符串,例如"2021-01-01"或"2021/01/01 12:10:30"等格式,也可以使用自纪元以来的毫秒数来表示(注:在Unix中,纪元是指...,错误的原因是写入的数据格式和定义的数据格式不同3.插入create_time的格式为yyyy-MM-dd HH:mm:ss数据#插入create_time的格式为yyyy-MM-dd HH:mm:ss...(geo)是用于存储经纬度的字段类型。...elasticsearch 中的数组类型 的详解ES数组没有定义方式,其使用方式是开箱即用的,即无须事先声明,在写入时把数据用中括号[]括起来,由ES对该字段完成定义。

    4.7K61

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

    一、对象关系映射 - ORM / Object Relational Mapping ---- Android 系统中使用的数据库是 SQLite 关系型数据库 , 使用 Android 提供的 api...就是 数据库链接对象 , 是 应用持久化数据底层连接的接入点 ; 使用 @Database 注解 修饰的类 , 该类必须继承 RoomDatabase 抽象类 ; 在该注解中 , 需要定义 数据库..."androidx.room:room-compiler:$room_version" // 可选配置项 - 支持 Kotlin 扩展和协程的 Room 框架 如果使用的是 Kotlin 语言必须导入该依赖..., 在应用运行时提供 Room 框架的数据库相关核心功能 ; 该依赖库 包含了 Room 持久化库的核心功能 , 如 : RoomDatabase 类:用于表示数据库,可以包含一个或多个表,并提供了一些方法来操作数据库..., 提供了 Kotlin 扩展功能 , 如果使用的是 Kotlin 语言 , 则必须导入该依赖库 ; 2、创建 Entity 实体类 创建 Entity 实体类 , 该实体类对应着数据库中的一张表 ,

    2.5K20

    Room & Kotlin 符号的处理

    认识 Kotlin 符号处理 随着注解处理器在 Android 上的广泛使用,KAPT 成为了编译时的性能瓶颈。...而在于重点介绍我们在为 Room 添加 KSP 支持时所面临的挑战和所做的权衡。为了理解本文您并不需要了解 Room 或者 KSP,但必须熟悉注解处理。...选项 C 实际上是不可行的,因为它会对 Java 用户造成严重的干扰。随着 Room 使用数量的增加,这种破坏性的改变是不可能的。...一旦编译测试覆盖情况较好,我们在下一步就会使用 KSP 运行 Room 的 集成测试。这些是实际的 Android 测试应用,也会在运行时测试其行为。...幸运的是,Android 支持 Gradle 变体,因此使用 KSP 和 KAPT 来运行我们 Kotlin 集成测试 便相当容易。 下一步 将 KSP 支持添加到 Room 只是第一步。

    1.1K30

    Android的room数据库使用小结(kotlin)

    Room是Google官方推荐使用的数据库,相比较某些优秀数据库框架来说,不用过于担心某天库会停止维护,且访问数据库非常流畅,并且提供了与常规的ORM框架一样,通过添加编译期注解来进行表和字段的配置,譬如...总而言之, Room功能强大,速度和稳定性不弱,还简单易用,算得上是一个优秀的数据库。 这里总结下使用room数据库的过程和遇到的问题,以及如何稳定的进行数据库的迁移和升级。...:1.1.1" kapt "android.arch.persistence.room:compiler:1.1.1" 需要注意的是,使用的是kotlin,annotationProcessor...使用主键 : 一个Entry中至少需要一个主键,使用@PrimaryKey来注释. 自增类型的主键,则可以设置 @PrimaryKey 的 autoGenerate 属性。...当修改表字段或者增加表结构时,数据库升级注意事项: 无论是增加新表还是只是修改表字段或增加表字段,都需要增加下数据库的版本号并增加Migration处理, @Database(entities = [User

    3.8K50

    【数据库】关系模型介绍+形式化关系查询语言

    A1, A2, …, An 元组(tuples):表中每一行数据 关系(relation):关系是无序的 关系实例(relation instance):表 关系模式(relation schema...关系的模式包括它的属性,还可能包括属性类型和关系上的约束, 比如主码和外码约束。 关系的超码(superkey)是一个或多个属性的集合,这些属性上的取值保证可以唯一识别岀关系中的元 组。...关系的一个候选码被选作主码(primary key) 在参照关系中的外码(foreign key)是这样的一个属性集合:对于参照关系中的每个元组来说,它在外 码属性上的取值肯定等于被参照关系中某个元组在主码上的取值...Relational Algebra关系代数 关系代数是一种过程化查询语言。它包括一个运算的集合,这些运算以一个或两个关系为输入, 产生一个新的关系作为结果。...集合并(Union Operation) 1. 关系r和s必须是同元的,即它们的属性数目必须相同。 2. 对所有的i,r的第i个属性的域必须和s的第i个属性的域相同。

    91510
    领券