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

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

一、Room 预填充数据简介 在 Android 中使用 Room 框架 , 创建 SQLite 数据库时 , 有时需要预填充一些数据 , 这些数据一般都是来自 assets 资源目录 ; 如果用户首次打开应用...应用中设预填充数据对应的数据库文件 ---- 1、数据准备 将上个章节生成的 init.db 数据库文件拷贝到 assets 目录下 , 然后在 RoomDatabase.Builder 构建器创建时...; /** * 配置Room以使用位于的预打包数据库创建和打开数据库 * 应用程序“assets/”文件夹。...最好是创建你的 * 预打包数据库模式时利用导出的模式文件生成 * (数据库。exportSchema]已启用。 * * 此方法不支持内存数据库[Builder]。...| 临时数据库表重命名 ) 的基础上 , 添加了 由 DB Browser for SQLite 工具制作的 预填充数据 文件 ; 1、Entity 实体类代码 该实体类中 , 暂时只保留 id ,

60820

Jetpack组件之Room

然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中的表列相对应的值。Room架构图如图所示。...将带有@AutoValue 注释的类用作实体时,可以使用 @PrimaryKey、@ColumnInfo、@Embedded 和 @Relation 为该类的抽象方法添加注释。...有时候,需要在应用启动的时候就加载一组特定的数据,这就称为预填充数据库。...从应用资源预填充 如需从位于应用assets/目录中的任意位置的预封装数据库文件预填充Room数据库,请先从RoomDatabase.Builder对象调用createFromAsset(),然后再调用...如果觉得在assets目录下占用应用体积,可以在应用启动时从服务端下载数据库文件到本地,从设备文件系统任意位置(应用的 assets/ 目录除外)的预封装数据库文件预填充Room数据库,请先从 RoomDatabase.Builder

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

    上手使用 Room Kotlin API

    这里我们会创建一个存储在数据库的词汇表,然后将它们显示到屏幕上,同时用户还可以向列表中添加单词。 定义数据库表 在我们的数据库中仅有一个表,就是保存词汇的表。...查询数据 为了能够查询表数据,我们这里创建一个抽象函数,并且为其添加 @Query 注解,注解后紧跟 SQL 请求语句: 该语句从单词数据表中请求全部单词,并且以字母顺序排序。...创建数据库 我们已经定义了存储在数据库中的数据以及如何访问他们,现在我们来定义数据库。要创建数据库,我们需要创建一个抽象类,它继承自 RoomDatabase,并且添加 @Database 注解。...比如您可以指定 Room 如何处理数据库冲突、可以通过创建 TypeConverters 存储原生 SQLite 无法存储的数据类型 (比如 Date 类型)、可以使用 JOIN 以及其它 SQL 功能实现复杂的查询...、创建数据库视图、预填充数据库以及当数据库被创建或打开的时候触发特定动作。

    98730

    深入探讨 Room 2.4.0 的最新进展

    尽管当时已经支持了很多功能,如 支持 Flow API,支持预填充数据库,支持一对一及多对多数据库关系,但是开发者们对 Room 有着更高的期望,我们也致力于此,在 2.2.0 - 2.4.0 版本中发布了很多开发者们期待的新功能...那我们来看看自动迁移该如何使用。在上面的示例中,自动迁移无法直接处理重命名表中的某一列,因为 Room 在进行自动迁移时,会遍历两个版本的数据库 schema,通过比较来检测两者之间的更改。...在处理列或者表的重命名时,Room 无法明确发生了什么更改,此时可能有两种情况,是删除后新添加的?还是进行了重命名?处理列或者表的删除操作时也会有同样问题。...} } 完成 AutoMigrationSpec 的实现后,还需要将其添加到数据库定义时配置的 @AutoMigation 中,同时提供两个版本的数据库 schema,Auto Migration...但是这种额外创建 data 类的方式,容易造成代码繁冗的问题。

    1.6K00

    上手使用 Room Kotlin API

    这里我们会创建一个存储在数据库的词汇表,然后将它们显示到屏幕上,同时用户还可以向列表中添加单词。...q=CoroutinesRoom 创建数据库 我们已经定义了存储在数据库中的数据以及如何访问他们,现在我们来定义数据库。...要创建数据库,我们需要创建一个抽象类,它继承自 RoomDatabase,并且添加 @Database 注解。将 Word 作为需要存储的实体元素传入,数值 1 作为数据库版本。...比如您可以指定 Room 如何处理数据库冲突、可以通过创建 TypeConverters 存储原生 SQLite 无法存储的数据类型 (比如 Date 类型)、可以使用 JOIN 以及其它 SQL 功能实现复杂的查询...、创建数据库视图、预填充数据库以及当数据库被创建或打开的时候触发特定动作。

    1.6K10

    JetPack--Room数据库

    JetPack提供了Room数据库,和GreenDAO等开源库一样,在SQLite做了封装 Room主要使用三个注解: 1.Entity:实体类,对应一张表 2.Dao:包含操作表的一些列方法 3.Database...需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...' 定义一个实体类,在class上使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里的数据转化为实体类,对于其他我们代码里使用的构造方法,可以使用@Ignore注解表示Room...我们在使用@Database注解时exportSchema指定为true,那么每次升级时,都会导出一个Schema文件,里面包含的数据库的创建信息,方便排查问题 同时我们也需要在gradle里指定下导出文件夹位置...//临时表重命名 database.execSQL("ALTER TABLE temp_user RENAME TO user"); } }; 5.预填充数据库

    1.5K20

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

    一、Room#Migration 迁移工具简介 1、Room 中的迁移工具 Migration 简介 使用 Room 访问数据库时 , 应用程序 的 数据模型 发生 改变 , 数据库版本进行升级 , 数据库表的字段...; 修改 Dao 数据库访问接口对象 , 包括添加 / 删除 / 修改 表 / 列 / 索引 ; 创建迁移类 : 创建一个用于执行数据库迁移的 迁移类 Migration , Migration 迁移类应...向 “student” 表中添加一个名为 “sex” 的整数类型列 , 该列不允许为空 , 并且默认值为 1 ; 可以使用类似的 ALTER TABLE 语句来修改表结构,添加、修改或删除列等操作 ;..., 即整数类型 ; not null 表示该新列不允许为空值,即在插入或更新数据时,必须为该列提供非空值。...修改 Entity 实体类 , 即更改数据模型 , 创建 Migration 迁移类 并 修改数据库版本 , 此时运行 , 手机应用中已经创建了 版本 1 的数据库 , 在该数据库的基础上 , 运行

    1.4K30

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

    :room-compiler:2.2.5' 2、定义 Entity 实体类 使用 Room 框架 的应用中 , Entity 实体类 对应着 数据库表 , 将 Entity 实体类 定义完成后 , 就意味着...*/ @Dao interface StudentDao { @Insert 注解 向数据库中插入数据 , 使用 @Insert 注解修饰对应的抽象方法 ; /** * 向数据库表中插入元素....build() 5、调用 Room 框架访问数据库 首先 , 获取 RoomDatabase 数据库实例类 , 调用其单例的获取函数即可 , 调用该函数 , 即可创建对应的数据库 ;...依赖库 和 编译时生成代码的 注解处理器 ; // 导入 Room 依赖库 implementation 'androidx.room:room-runtime:2.2.5'...import androidx.room.Ignore import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 和 对鹰的实体类

    48130

    Room 中的数据库自动迁移功能

    现在,使用自动迁移功能,您就可以指定从哪个版本迁移到哪个版本了。Room 可以针对简单的情况自动生成迁移程序,例如添加或删除列、创建新的数据库表。但是在模棱两可的场景下,Room 则需要一些帮助。...在自动迁移中加入自动元素 举例来说,我们需要在数据库中的一个表中新添加一列,并将数据库从版本 1 升级到版本 2。...,如添加新列或表,更新主键、外键或索引,或更改列的默认值,Room 会自动检测出这些变化,不需要额外介入。...当自动迁移需要帮助时 Room 的自动迁移无法检测到数据库上执行的所有可能的变化,因此有时候它们需要一些帮助。举一个常见的例子,Room 没办法检测到一个数据库表或列是否被重命名或者被删除。...TL;DR: 当数据库被首次访问时,Room 会检查当前的数据库版本是否与 @Database 中定义的版本不同。如是,Room 会寻找出从此到彼的迁移路径,届时会连续地执行迁移操作。

    1.4K10

    Android Room 持久化库

    /room/defining-data.html 我们定义的每一个实体,Room 都会对应的在数据库中创建一个表。...在编译时,Room会知道是查询用户表的所有列。如果查询包含语法错误或者数据库中不存在这个表。Room会在编译时报错并给出错误信息。 将参数传递给查询 大部分时候查询都是需要过滤参数的。...json 文件加入到版本控制中,它记录了数据库的模式历史,它能让Room在测试时创建老版本的数据库。...使用 Room 创建数据库时,验证数据库和用户数据的稳定性非常重要。...使用类型转换器 有时候你想存储自定义的数据类型在数据库的单个列中。这就需要为自定义类型添加一个类型转换器,这个转换器会将自定类型转换为Room能够认识的原始类型。

    4K70

    Jetpack之Room的使用,结合Flow

    依赖 如需在应用中使用Room,请将以下依赖项添加到应用的 build.gradle文件。...使用 @Database注释的类应满足以下条件: 是扩展 RoomDatabase 的抽象类。 在注释中添加与数据库关联的实体列表。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中的表列相对应的值。...version 数据库版本号 注意: 如果您的应用在单个进程中运行,在实例化 AppDatabase 对象时应遵循单例设计模式。...建议升级操作顺序 修改版本号 -> 添加Migration -> 添加给databaseBuilder 配置编译器选项 Room 具有以下注解处理器选项: room.schemaLocation:配置并启用将数据库架构导出到给定目录中的

    1.1K20

    Room 中的数据库关系

    从 Room 2.2 的稳定版开始,我们可利用一个 @Relation 注解来支持表之间所有可能出现的关系: 一对一、一对多和多对多。 一对一关系 ?...: List 更高阶的数据库关系用例 当使用 @Relation 注解时,Room 会默认从所修饰的属性类型推断出要使用的数据库实体。...如果您想让该查询返回一个不同的类,比如 Pup 这样不是一个数据库实体但是包含了一些字段的对象。...entity = Dog::class, entityColumn = "dogOwnerId" ) val dogs: List ) 如果我们只想从数据库实体中返回特定的列...记住,SQLite 中的外键会创建索引,并且会在更新或者删除表中数据时做级联操作。因此您要根据实际情况来判断是否使用外键功能。

    2.2K10

    Android Jetpack - Room

    Room 简介 Room 持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问 Room 库帮你的 App 在设备上创建一个缓存,并作为此 App...最常见的用例是缓存相关的数据。这样,当设备无法访问网络时,用户仍然可以在离线时浏览该内容。...然后,应用程序使用每个 DAO 从数据库中获取实体,并将对这些实体的任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据库中的表列对应的值 Room 组件关系图 ?...使用 Room 组件 本示例我会参照 CodeLabs 来做一个 WordList,我会精简一下流程,完整代码示例在文末 1、创建 Project 略 2、添加依赖 app 的 build.gradle...方法添加可以在数据库启动阶段的回调,在 onOpen 或 onCreate 阶段处理一些初始化操作,比如填充默认数据等 @Database(entities = [Word::class], version

    1.9K70

    深入探索 Paging 3.0: 分页加载来自网络和数据库的数据 | MAD Skills

    在上一篇文章《获取数据并绑定到 UI | MAD Skills》中,我们在 ViewModel 中集成了 Pager,并利用配合 PagingDataAdapter 向 UI 填充数据,我们也添加了加载状态指示器...使用 Room 创建 PagingSource 由于我们将要分页的数据源会来自本地而不是直接依赖 API,那么我们要做的第一件事便是更新 PagingSource。好消息是,我们要做的工作很少。...事实上这里的帮助远不止于一点: 只需要在 Room 的 DAO 中为 PagingSource 添加声明,便可通过 DAO 获取 PagingSource!...本地的数据库要如何填充数据呢?来看看 RemoteMediator,当数据库中的数据加载完毕时,它负责从网络加载更多数据。让我们看看它是如何工作的。...回顾 在本文中,我们实现了以下功能: 使用数据库作为唯一可信数据源,并对数据进行分页; 使用 RemoteMediator 填充基于 Room 的 PagingSource; 使用来自 PagingAdapter

    1.1K20

    SqlAlchemy 2.0 中文文档(七十九)

    使用 keep_existing,返回现有的 Table,但不添加额外的构造元素 - 这些元素仅在新创建 Table 时应用。...#1926 简化的多态 _on 赋值 在继承场景中使用时,polymorphic_on列映射属性的填充现在发生在对象构造时,即调用其__init__方法时,使用 init 事件。...然后,该属性的行为与任何其他列映射属性相同。以前,特殊逻辑会在刷新时触发以填充此列,这会阻止任何用户代码修改其行为。新方法在三个方面改进了这一点:1. 多态标识现在在对象构造时立即存在;2....extend_existing等同于useexisting - 返回现有表,并添加额外的构造元素。使用keep_existing,返回现有表,但不添加额外的构造元素 - 这些元素仅在表新建时应用。...使用 keep_existing,返回现有的 Table,但不添加额外的构造元素 - 这些元素仅在创建新 Table 时应用。

    10210

    Android 让你的 Room 搭上 RxJava 的顺风车 从重复的代码中解脱出来

    于是,Room 也就应运而生了 它通过注解处理器的形式,将繁琐无趣的代码封装起来,我们只需要添加一个简单的注解,就可以完成一系列复杂的功能!...Database:创建一个由 Room 管理的数据库,并在其中自定义所需要操作的数据库表 要求: 1. 必须是abstract类而且的extends RoomDatabase。 2....我们就不难想到,Google 之所以这样设计,是因为我们于是需要创建临时的 User 对象,但我们又不希望 @Entity 在我们调用构造方法时,就将其存入数据库。...所以我们就有了这个被 @Ignore 的构造方法,用于创建不被自动存入数据库的临时对象,等到我们想将这个对象存入数据库时,调用User(String id, String userName) 即可。...:这是用来设定,当插入数据库中的数据,与原数据发生冲突时的处理方法。

    1.2K20

    通过构建扫雷游戏来磨练高级 Bash 技能【Programming】

    保持可用和发现(提取)地雷的数量 5. 创建残局逻辑 打印雷区 在扫雷游戏中,游戏世界是一个由隐藏单元组成的2D 数组(列和行)。 每个单元可能装有或不装有爆炸性地雷。...接下来,在每一行中,都有一个列交叉,因此是时候打开一个新的 for 循环了。 它管理每个列,因此本质上生成了操作场中的每个单元格。 我添加了一些 helper 函数,您可以在源代码中看到完整的定义。...image.png 创建玩家逻辑 玩家逻辑从stdin读取一个选项作为地雷的坐标,并提取雷场上的精确场。...当提供h6作为输入时,一些值随机填充在我们的雷区中,这些值会在提取分值后添加到用户分数中。...现在请记住我们在开始时声明的变量,[ a-g ] ,现在我将使用它们提取随机地雷,并使用 Bash 间接向变量 m 赋值。

    95600

    SpringBoot 集成 MybatisPlus 十——数据自动填充

    之前学习了逻辑删除字段,在向数据库插入数据时,都需要设置 isDeleted=0,这在进行频繁地数据插入时就显得有些繁琐,于是 MybatisPlus 就为我们提供了自动填充的功能。...修改实体类,为需要自动填充的字段在注解 @TableField 中添加 fill 属性。...插入操作和更新操作均填充字段2 修改数据库取消数据库中 isDeleted 列的默认值设置,这样在进行数据插入时,我们就必须要为该列设置数据。...3 修改实体类实体类中,在 isDeleted 属性上的 @TableField 注解中增加 fill 属性,且将属性值设置为 FieldFill.INSERT,因为我们只需要在对数据进行插入操作时,才会使用到自动填充功能...:被填充的列;用来填充的数据;被填充的元对象。

    88410
    领券