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

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

一、Room 预填充数据简介 在 Android 中使用 Room 框架 , 创建 SQLite 数据库时 , 有时需要预填充一些数据 , 这些数据一般都是来自 assets 资源目录 ; 如果用户首次打开应用...> { mCopyFromAssetPath = databaseFilePath return this } 2、原执行结果 如果不设置 数据库 初始化数据 , 则输出的日志如下 :...8, name='Tom', age=18), Student(id=9, name='Jerry', age=16)] 五、预填充数据报错信息 - 数据库字段属性必须完全相同 ---- 期间遇到该错误..., 这里 在 DB Browser for SQLite 工具中设置 age 字段为非空字段 ; 右键点击数据库表 , 在弹出的右键菜单中 , 选择 " 修改表 " 选项 , 将 age 属性设置为非空...import android.util.Log import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase

60920

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

(1, 2) 即可 ; 从 数据库版本 1 升级为 数据库版本 3 , 先执行 Migration(1, 2) , 再执行 Migration(2, 3) ; Room 提供了简便的方式来 处理 Android..., 该列不允许为空 , 并且默认值为 1 ; 可以使用类似的 ALTER TABLE 语句来修改表结构,添加、修改或删除列等操作 ; alter table student 表示对 student 数据库表...进行修改 ; add column sex integer 表示 要添加的新列名为 “sex” , 数据类型为 integer , 即整数类型 ; not null 表示该新列不允许为空值,即在插入或更新数据时...,必须为该列提供非空值。...import android.util.Log import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase

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

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

    ; plugins { id 'com.android.application' } 如果使用 Kotlin 语言开发 , 需要在 android 插件 的基础上 额外导入 kotlin 和...kotlin-kapt 插件 ; plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android'...id 'kotlin-kapt' } 导入依赖 导入依赖库区别 : 如果导入错误 , 就会出现 如果使用 Java 语言开发 , 需要使用 annotationProcessor 导入注解处理器 , 用于在编译期间生成代码...使用 @ColumnInfo 注解定义 , 该注解中的参数 : name = “id” 定义了 数据表的列名称 ; typeAffinity = ColumnInfo.INTEGER 定义该 列字段的类型是...( Java ) //annotationProcessor 'androidx.room:room-compiler:2.2.5' 完整代码如下 : plugins { id 'com.android.application

    48330

    Jetpack组件之Room

    首语 Android使用SQLite作为数据库存储数据,但是SQLite使用繁琐且容易出错,有许多开源的数据如GreenDAO、ORMLite等,这些都是为了方便SQLite的使用而出现的,Google...",childColumns="当前表列名",onDelete时 NO_ACTION(默认,不操作);RESTRICT(相关联);SET_NULL(设置为Null);SET_DEFAULT(设置为默认值...= {"name","age"},unique = true)}) public class Student extends Score{ //PrimaryKey 主键,必须要有,且不为空,...需要注意的是:启用Fts的表必须使用Integer类型的主键,且列名为“rowid”。 如果表支持以多种语言显示内容,可以使用languageId指定用于存储每一行语言信息的列。...此支持在Entity的两个实例被视为相等(如果这两个实例的列包含相同的值)时尤为有用。

    1.9K20

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

    一、Room#Migration 迁移工具升级数据库 Room Migration 数据库迁移工具 是 Android Jetpack Architecture Components ( 架构组件 )...的一部分 , 它是一个方便的 数据库迁移工具 , 用于为 Android 中使用 Room 框架创建的数据库 提供 自动化迁移方案 ; Room Migration 数据库迁移工具用途如下 : 数据库修改.../ typeAffinity 设置列类型 */ @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id", typeAffinity...= ColumnInfo.INTEGER) var id: Int = 0 /** * 姓名字段 * 数据库表中的列名为 name * 数据库表中的类型为...', age=60)] 第一行打印的日志是 Observer#onChanged 回调, List: [] , 当前数据库是空的 , 之前的数据都被清空 , 此时打印的日志都是本次应用运行时新插入的数据

    56820

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

    一、销毁 和 重建策略 在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 , 如 : 涉及到 修改 数据库表字段的数据类型 , 需要逐个修改数据库值...1、数据库版本 3 代码示例 RoomDatabase 数据库类完整代码 package kim.hsl.rvl import android.content.Context import android.util.Log.../ typeAffinity 设置列类型 */ @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id", typeAffinity...import android.util.Log import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase.../ typeAffinity 设置列类型 */ @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id", typeAffinity

    47240

    基于NPOI的Excel导入导出类库

    特性配置导入验证,非空验证,唯一验证,错误标注等 用于基础配置和普通报表的导入导出,对于复杂需求,比如公式,导出图片等暂不支持 GitHub地址: https://github.com/Mike-Zrw...SheetName sheetName不设置默认为sheet1,sheet2等 FilterColumn :导出指定列。...可根据选中的列名或者属性名导出指定的列 导入配置支持 ColumnRegexAttribute:正则判断,正则表达式判断单元格内容 ColumnRequiredAttribute:非空判断,对于不可为空的类型即使没有设置该特性...,仍会进行非空判断,所以如果一个可以为空的int类型,请设置字段类型为int?...HeaderRowIndex:列名所在行 ImportBook.DataErrorForegroundColor: 错误前景色(红) ImportBook.RepeatedErrorForegroundColor

    84310

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    一、Room + ViewModel + LiveData 框架使用核心要点 1、Room 框架优化分析 在上一篇博客 【Jetpack】使用 Room 框架访问 Android 平台 SQLite 数据库...( 导入依赖 | 定义 Entity 实体类 | 定义 Dao 数据库访问对象接口 | 定义数据库实例类 ) 中 , 实现了 使用 Room 框架访问 Android 中的 SQLite 数据库的操作...框架的用法 , 参考 【Jetpack】使用 Room 框架访问 Android 平台 SQLite 数据库 ( 导入依赖 | 定义 Entity 实体类 | 定义 Dao 数据库访问对象接口 | 定义数据库实例类...:room-compiler:2.2.5' 完整代码 : plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android.../ typeAffinity 设置列类型 */ @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id", typeAffinity

    1K20

    Android Room 持久化库

    Room 也会验证方法的返回值,如果返回对象中的字段名称和查询响应中的字段名字不匹配, Room 会通过以下方式给出提示 如果只有一些字段名称不匹配,会发出警告 如果没有字段名称匹配,会发出错误。...在编译时,Room会知道是查询用户表的所有列。如果查询包含语法错误或者数据库中不存在这个表。Room会在编译时报错并给出错误信息。 将参数传递给查询 大部分时候查询都是需要过滤参数的。...Room使用参数名字匹配,如果匹配不上给出错误提示。...在迁移完成之后,Room 验证模式会确认迁移正确进行,如果 Room 发现错误,会抛出一个包含不匹配的异常。 测试迁移 数据迁移是很重要的,一旦迁移失败可能会发生Crash。...测试数据库有两种方法 在Android 设备上 在开发主机上(不推荐) 关于测试指定数据库升级的信息 上面已经说过了。 注意:在测试时,Room允许创建Dao的模拟实例。

    4K70

    MySQL数据库表约束详解

    2.空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...第二个a(紧跟在CHANGE关键字后的两个参数中的第二个):这是修改后列的新名称(在这个特定情况下,它仍然是a,意味着列名没有改变)。...通常,CHANGE子句用于在修改列的数据类型或其他属性时同时更改列名。如果您只想更改列的数据类型或属性而不更改列名,就像您的示例中所做的那样,您需要重复列名。...这里是一个简化的解释: ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型及属性; 但在您的例子中,旧列名和新列名都是a,所以看起来就有两个a。...6.主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

    7600

    详解Apache Hudi Schema Evolution(模式演进)

    新列的类型 nullable : 新列是否可为null,可为空,当前Hudi中并未使用 comment : 新列的注释,可为空 col_position : 列添加的位置,值可为FIRST或者AFTER...column_type 新的列类型 col_comment 列comment column_name 列名,放置目标列的新位置。...Schema变更 COW MOR 说明 在最后的根级别添加一个新的可为空列 Yes Yes Yes意味着具有演进模式的写入成功并且写入之后的读取成功读取整个数据集 向内部结构添加一个新的可为空列(最后)...然而如果 upsert 触及所有基本文件,则读取将成功 添加自定义可为空的 Hudi 元列,例如 _hoodie_meta_col Yes Yes 将根级别字段的数据类型从 int 提升为 long...作为一种解决方法,您可以使该字段为空 向内部结构添加一个新的不可为空的列(最后) No No 将嵌套字段的数据类型从 long 更改为 int No No 将复杂类型的数据类型从 long 更改为

    2.1K30

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

    例如,在 Android 开发中,我们有 Android Framework SQLite Java API,但是开发者们通常会在项目中使用 Jetpack Room 来操作数据库。...它可以进行行迭代、获取指定列名的列号,以及 get 一些基本类型和 String 等数据,它的定义如下: interface CommonCursor { fun getInt(columnIndex...我们通过elementIndex 在该类的众多属性中查找到当前对应的属性名,再根据这个属性名查询到名称相同的列名的列号,如果列号大于等于 0 则表示列名合法,直接返回 elementIndex 即可,否则进行下一轮迭代...利用 Kotlin 的语法规则可以在很大程度上保证在编译期间暴露出我们编写的 SQL 错误,并在绝大部分情况下阻止错误的 SQL 语句代码通过编译。...:https://developer.android.com/training/data-storage/room Exposed:https://github.com/JetBrains/Exposed

    1.7K40

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

    数据库结构的文件 , 通过该文件 , 可以 很方便地开发者了解数据库的历史变更记录 , 方便排查问题 ; Schema 文件 定义了数据库中的表、列、索引等元素的结构 , 并包含了创建和升级数据库的..., exportSchema 参数都设置为了 false , 没有导出 Schema 文件 ; 此外 , 还要在 build.gradle 构建脚本中 配置 Schema 文件的生成位置 , 在 " android...": "$projectDir/schemas".toString() 参数 ; 完整的配置层级如下 : android { namespace 'kim.hsl.rvl' compileSdk...} return instance; } 将 Entity 实体类中 新增的字段 注释掉 ; /** * 性别字段 * 数据库表中的列名为...2 - 第二次运行应用 首先 , 设置 Entity 实体类中的字段 , 在 数据库版本 1 的基础上 , 添加 sex 字段 ; /** * 性别字段 * 数据库表中的列名为

    41810

    制作一个Android Sqlite远程运维小工具

    ,只能通过改了本地数据库再覆盖Android的数据库,这样操作起来非常麻烦,所以本章就是在当时的程序基础上实现了一个针对Android Sqlite数据库进行Sql操作的运维小工具。...本地的数据库操作我们还是用的Room框架,只不过网上大部分Room的教程都是类的查询,做运维时是需要自己写Sql的,所以是用了Sqlite里面对应的query和execsql这两个方法(查询和执行脚本用到...来判断 2 select开头的脚本返回Cursor后动态生成字符串后通讯到PC端 3 不是select开头的使用execsql直接执行脚本 4 通讯方式还是用前篇一样的NanoMsg 核心函数 使用Room...Cursor中有columncount和columnNames,通过这两个可以得到当前的游标返回的列数和列名。...val sb = StringBuilder() //生成对应列名 val columnqty = it.columnCount

    73820
    领券