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

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

; plugins { id 'com.android.application' } 如果使用 Kotlin 语言开发 , 需要在 android 插件 的基础上 额外导入 kotlin 和.../** * 根据传入的 id 查询数据库表 * 在注解中使用 :id 调用参数中的 id: Int */ @Query("select * from student...对象的 build 函数 , 创建数据库 ; 注意 : Room 原则上不允许在主线程操作数据库 , 如果要在主线程操作数据库 需要调用 RoomDatabase.Builder # allowMainThreadQueries...* 根据传入的 id 查询数据库表 * 在注解中使用 :id 调用参数中的 id: Int */ @Query("select * from student where...RoomDatabase 抽象类 , 使用 @Database 注解修饰 该抽象类 ; 其中需要 定义 获取 数据库访问 对象 的抽象函数 ; 将该类定义成 单例类 , 在单例对象初始化时 , 创建数据库

48130

【翻译】Realm , ObjectBox ,还是 Room ,哪个适合你?

Room 在官方的架构指南中占据着一个中心位置,它提供在 SQLite 上的一个抽象层,允许在充分利用 SQLite 的强大基础上进行流畅地数据库访问开发。...在 Room 中有 3 个主要的组件,都是使用注解来展示说明: Database :你可以使用这个组件来创建数据库的持有者。...你可以使用 Room.databaseBuilder() 或者 Room.inMemoryDatabaseBuilder()获取到它的一个实例。 Entity :这个组件代表了数据库中一行数据的类。...无需手动数据模式迁移:它能够自动处理新版本对象所新加的、删除的、重命名的属性。 等等,等等。 那么实际代码中它是怎样的呢?...只需 2 行代码就能把数据库和操作分离: 确切地说,“数据存储盒子”对象,应该放置在你的 Application 类中: MyObjectBox.builder().androidContext(App.this

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

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

    : 使用 ORM 框架操作数据库 , 可以在 不改变代码的前提下 , 更换底层数据库 ; 提高了性能 : 可以 总体优化 ORM 框架的 增删查改 操作性能 ; 提高了安全性 : 可避免直接使用 SQL...就是 数据库链接对象 , 是 应用持久化数据底层连接的接入点 ; 使用 @Database 注解 修饰的类 , 该类必须继承 RoomDatabase 抽象类 ; 在该注解中 , 需要定义 数据库...:room-runtime 依赖库 是 运行时核心依赖库 , 在应用运行时提供 Room 框架的数据库相关核心功能 ; 该依赖库 包含了 Room 持久化库的核心功能 , 如 : RoomDatabase...Entity 注解:用于标记实体类,指定实体类对应的数据库表的名称和字段信息等。 Dao 数据库访问对象:用于定义访问数据库的方法,例如查询、插入和删除等操作。..., 提供了 Kotlin 扩展功能 , 如果使用的是 Kotlin 语言 , 则必须导入该依赖库 ; 2、创建 Entity 实体类 创建 Entity 实体类 , 该实体类对应着数据库中的一张表 ,

    1.7K20

    Jetpack之Room的使用,结合Flow

    准备工作 Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。...使用 @Database注释的类应满足以下条件: 是扩展 RoomDatabase 的抽象类。 在注释中添加与数据库关联的实体列表。...Entity:表示数据库中的表。 DAO:包含用于访问数据库的方法。 应用使用 Room 数据库来获取与该数据库关联的数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中的表列相对应的值。...这是因为 SQLite 数据库的内容更新通知功能是以表 (Table) 数据为单位,而不是以行 (Row) 数据为单位,因此只要是表中的数据有更新,它就触发内容更新通知。

    1.1K20

    上手使用 Room Kotlin API

    在本文中我会告诉大家如何使用并且测试 Room Kotlin API,同时在介绍过程中,我也会为大家分享其工作原理。 我们将基于 Room with a view codelab 为大家讲解。...这里我们会创建一个存储在数据库的词汇表,然后将它们显示到屏幕上,同时用户还可以向列表中添加单词。...#0 定义数据库表 在我们的数据库中仅有一个表,就是保存词汇的表。...一种实现方法是在类中添加伴生对象,并且在其中定义一个 RoomDatabase 实例,然后在类中添加 getDatabase 函数来构建数据库。...当实现 Dao 测试的时候,在每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备上存储数据,当创建数据库的时候,我们可以使用内存数据库。

    1.6K10

    Jetpack组件之Room

    也意识到了这个问题,在Jetpack组件中推出了Room,Room在SQLite上提供了一层封装,可以流畅的访问数据库。...使用@Database注解的类应满足以下条件: 是扩展RoomDatabase的抽象类。 在注释中添加与数据库关联的实体列表。 包含具有0个参数且返回使用@Dao注释的类的抽象方法。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中的表列相对应的值。Room架构图如图所示。...有时候,数据库中的某些字段必须是唯一的,可以通过@Index注解的unique属性设为true,强制实施此唯一属性。如上代码所示可防止name和age同组值的两行。...在 Room 2.1.0 以上版本中,基于 Java 的不可变值类(使用 @AutoValue 进行注释)用作应用数据库中的Entity。

    1.9K20

    深入探讨 Room 2.4.0 的最新进展

    如果您使用 Room,那么在 数据库迁移 过程中会进行检查并验证更新后的 schema,另外您也可以在 @Database 中设置 exportSchema,来导出 schema 信息。...那我们来看看自动迁移该如何使用。在上面的示例中,自动迁移无法直接处理重命名表中的某一列,因为 Room 在进行自动迁移时,会遍历两个版本的数据库 schema,通过比较来检测两者之间的更改。...在处理列或者表的重命名时,Room 无法明确发生了什么更改,此时可能有两种情况,是删除后新添加的?还是进行了重命名?处理列或者表的删除操作时也会有同样问题。...") fun getSongAndArtist(): Map 使用 @MapInfo 实际上,您可以通过 @MapInfo 在映射的使用中更加灵活。...支持 Kotlin Symbol Processing (KSP) KSP 用于替代 KAPT,它能够在 Kotlin 编译器上以原生方式运行注解处理器,从而显著缩短构建时间。

    1.6K00

    Kotlin 协程和 Android SQLite API 中的线程模型

    当一个正在进行的事务中的某个查询在当前线程中被执行时,它会被视为是该事务的一部分并允许继续执行。...当数据库的事务操作都是在一个线程上完成的,这样的 API 不会有任何问题,但是使用协程之后问题就来了,因为协程是不绑定在任何特定的线程上的。...这一机制能够让子协程继续使用同一个调度器,或在父协程被取消时,它们会被一起取消。本质上,Room 提供的挂起事务 API 会创建一个专门的协程上下文来在同一个事务作用域下执行数据库操作。...在事务执行期间,即使调度器因子协程发生了变化,已执行的数据库操作仍会被分配到该事务线程上。 ...CoroutineContext 中的这个元素类似于 ThreadLocal,它能够跟踪线程中是否有正在进行的事务。

    1.9K20

    上手使用 Room Kotlin API

    在本文中我会告诉大家如何使用并且测试 Room Kotlin API,同时在介绍过程中,我也会为大家分享其工作原理。 我们将基于 Room with a view codelab 为大家讲解。...这里我们会创建一个存储在数据库的词汇表,然后将它们显示到屏幕上,同时用户还可以向列表中添加单词。 定义数据库表 在我们的数据库中仅有一个表,就是保存词汇的表。...Kotlin Vocabulary 中介绍了 协程的相关基本概念, 在 Kotlin Vocabulary 另一个视频中则介绍了 Flow 相关的内容。...一种实现方法是在类中添加伴生对象,并且在其中定义一个 RoomDatabase 实例,然后在类中添加 getDatabase 函数来构建数据库。...当实现 Dao 测试的时候,在每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备上存储数据,当创建数据库的时候,我们可以使用内存数据库。

    98730

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

    导语 Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。 ? Room简介 ?...使用 @Database 注释的类应满足以下条件: 是扩展 RoomDatabase 的抽象类。 在注释中添加与数据库关联的实体列表。 包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。...Entity:表示数据库中的表。 DAO:包含用于访问数据库的方法。 应用使用 Room 数据库来获取与该数据库关联的数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。最后,应用使用实体来获取和设置与数据库中的表列相对应的值。 Room 不同组件之间的关系图 ?...使用过程中,经常会遇到数据库升级的问题,在Room中使本地SQLITE库数据库升级可以用Migration方式,我们直接做一个新的类,对数据进行操作,也直接在原数据库上升级。

    1.1K20

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

    总而言之, Room功能强大,速度和稳定性不弱,还简单易用,算得上是一个优秀的数据库。 这里总结下使用room数据库的过程和遇到的问题,以及如何稳定的进行数据库的迁移和升级。...首先准备,引入依赖,在app文件夹下的build.gradle中增加: //ROOM数据库 implementation "android.arch.persistence.room:runtime..." 还需引入一个插件:apply plugin: 'kotlin-kapt' 代码结构目录是不是很清晰,在room下dao的单独建dao包,操作接口在这里实现,所有的表定义单独在entity包中。...简单的使用: 第一步,在entiy包中增加实体类的定义,每个实体类对应一个表,,类前面加@Entity注解,默认类名就是最终生成的表名,如果不想让一致,可以指定表名(@Entity (tableName...如果仅是测试,清空数据或删除掉db文件就可以从新来过了。 如果有正式的数据,在进行表结构的更改前,需做好安全测试保证数据不丢失。

    3.3K50

    安卓软件开发:理解Room数据库和上手

    数据库(Database)RoomDatabase类是数据库的入口点,为应用提供了DAO的实例。通过继承RoomDatabase使用@Database注解创建数据库类。...• abstract fun userDao()方法返回UserDao,通过它可以访问用户相关的数据库操作。3. Room数据库的上手指南我演示如何在Demo中集成和使用Room数据库。3.1....Java/Kotlin,希望使用协程进行数据库操作,引入room-ktx库。...创建数据库实例在应用的主模块中创建数据库的实例。在AndroidApp中,通常使用单例模式创建和获取数据库实例。...同时,通过getAllUsers返回Flow>,可以实时监听数据库中用户列表的变化。3.4. 数据库迁移在实际开发中,数据库的结构可能会发生变化,比如添加新字段、删除旧字段等。

    44730

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

    实现 Room 的 Migration 接口 , 并 定义数据库从旧版本迁移到新版本的操作 ; 指定迁移规则 : 在 Room 数据库的构建器中 , 使用 addMigrations 方法指定迁移规则...; 2、创建 Migration 迁移类 然后 , 在 RoomDatabase 中 , 定义 final 静态的 Migration 类 , 如果是 Kotlin 中 , 则定义在 伴生对象 companion...default 1 表示新列的默认值为 1 ; 当插入新行时 , 如果没有显式提供 “sex” 列的值 , 将使用默认值 1 ; 3、修改数据库版本 数据库的版本 在 RoomDatabase 的抽象实现类...修改 Entity 实体类 , 即更改数据模型 , 创建 Migration 迁移类 并 修改数据库版本 , 此时运行 , 手机应用中已经创建了 版本 1 的数据库 , 在该数据库的基础上 , 运行...在 RoomDatabase 中 , 定义 final 静态的 Migration 类 , 如果是 Kotlin 中 , 则定义在 伴生对象 companion object 中 ; 这里使用 匿名内部类

    1.4K30

    Android Jetpack - Room

    Room 简介 Room 持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问 Room 库帮你的 App 在设备上创建一个缓存,并作为此 App...使用@Database注释的类应满足以下条件: 继承了 RoomDatabase 的抽象类 在注解中包含与数据库相关联的实体类列表 包含一个无参抽象方法,并返回使用 @Dao 注释的类。...然后,应用程序使用每个 DAO 从数据库中获取实体,并将对这些实体的任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据库中的表列对应的值 Room 组件关系图 ?...在最常见的示例中,Repository 实现了用于决定是从网络获取数据还是使用在本地数据库中缓存的结果的逻辑,既避免了 ViewModel 和数据的直接交互又统一了单一真实数据源的逻辑 Repository...在 MVVM 架构中的位置 ?

    1.9K70

    Jetpack---Paging你知道怎样上拉加载吗?

    背景 在我的Jetpack_Note系列中,对每一篇的分析都有相对应的代码片段及使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub上,参考了官方的Demo以及目前网上的一些文章...Paging库中提供了三个子类来让我们在不同场景的情况下使用: PageKeyedDataSource:如果后端API返回数据是分页之后的,可以使用它;例如:官方Demo中GitHub API中的SearchRespositories...就可以返回分页数据,我们在GitHub API的请求中制定查询关键字和想要的哪一页,同时也可以指明每个页面的项数。...比如从数据库中的1200条开始加在20条数据。 3....刷新数据 基本原理在图上我们可以很清晰的了解到了,本篇文章的Demo中结合了ViewModel以及DataBinding进行了数据的存储和绑定。

    1.8K40

    【Jetpack】使用 Room 中的 Migration 升级数据库异常处理 ( 多个数据库版本的迁移 | fallbackToDestructiveMigration() 函数处理升级异常 )

    的一部分 , 它是一个方便的 数据库迁移工具 , 用于为 Android 中使用 Room 框架创建的数据库 提供 自动化迁移方案 ; Room Migration 数据库迁移工具用途如下 : 数据库修改...数据库 保持最新架构 ; 二、多个数据库版本的迁移 在原始 版本 1 的数据库中 , 有如下 : id , name , age , 三个字段 ; @Entity(tableName = "student...() 函数 在上一篇博客 【Jetpack】使用 Room 中的 Migration 升级数据库 ( 修改 Entity 实体类 - 更改数据模型 | 创建 Migration 迁移类 | 修改数据库版本...() { 如果 只在 RoomDatabase 的 @Database 注解上 修改了数据库版本 , 而没有创建对应的 Migration 迁移类 , 那么就会出现 IllegalStateException...时 , 执行一下 RoomDatabase.Builder#fallbackToDestructiveMigration() 函数 , 之后在使用 Migration 迁移数据库时 , 如果出现异常

    56620

    运维必备之 db2 的锁

    ,结果集中只有正在被读取的那一行(游标指向的行)将被加上NS锁(什么是 NS 锁,下文有),其他未被处理的行上不被加锁。...3、读稳定性(Read Stability) 如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上NS锁,直到该事务被提交或回滚,行上的锁才会被释放。...这样可以保证在一个事务中即使多次读取同一行,得到的值不会改变。但是,如果使用这种隔离级,在一个事务中,如果使用同样的搜索标准重新打开已被处理过的游标,则结果集可能改变。...4、可重复读(Repeatable Read) 是最严格的隔离级别,如果使用这种隔离级,在一个事务中所有被读取过的行上都会被加上 S 锁,知道该事务被提交或回滚,行上的锁才会被释放。...后续的旅客通过酒店前台来看哪个房间是可的,那么,如果没有意图锁,会出现什么情况呢,假设我要住房间,那么我每次都要到每一个房间看看这个房间有没有住人,显然这样做的效率是很低下的。

    1.3K30

    开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

    但以今天的眼光来看,我认为 Exposed的 API 有如下不足: (1)数据库不支持序列化与反序列化为对象,实际上的编程体验仍然像在操作一个 Map。...在近期我的调研中,在 x86 架构下 SQLDelight 带来的包 size 增长为 200 kb,比之前有所改善。...在我的构思中,我希望 DSL 的设计可以尽量还原 SQL 语法,并且能最大程度的减少用户编写的样板代码。...3.3.3 使用 Kotlin Symbol Processor 实现表与列元素生成 在 3.3.1 小节的基本设计中,Table 实例是通过构造函数创建的,每次创建时用户都需要手动传入数据库的真实表名作为其参数...在最近的 Github issue 中我们发现,有一些开发者希望我们能考虑 JVM 后端场景,可以像 SQLDelight 一样在 JVM 上连接后端数据库,这是个不错的建议,我们可以将其列为长期规划,

    1.7K40
    领券