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

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

总而言之, Room功能强大,速度稳定性不弱,还简单易用,算得上是一个优秀的数据库。 这里总结下使用room数据库的过程遇到的问题,以及如何稳定的进行数据库的迁移升级。..." 还需引入一个插件:apply plugin: 'kotlin-kapt' 代码结构目录是不是很清晰,在roomdao的单独建dao,操作接口在这里实现,所有的表定义单独在entity。...= null } 第二步,在dao里写对应的dao,对应的操作, 注意这些操作接口最好都带个返回值,比如insert返回long,delete返回Int。因为最终的使用总要对操作结果来个判断吧。...(context:Context){ //判断目录是否存在,不存在则创建该目录 val dir = File(DB_PATH) if (!...如果仅是测试,清空数据或删除掉db文件就可以从新来过了。 如果有正式的数据,在进行表结构的更改前,做好安全测试保证数据不丢失。

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

    Jetpack Room使用

    Room使用 回顾 数据库有多张表,一张表只能记录一种Class,Class的具体属性是这个表的列;所有对表的操作都要通过Dao来访问 注解说明: @Enity 作用于Class上,表示创建一张表记录该...Class,Class内部属性使用@ColumnInfo声明该列名字Type @Dao 作用于Interface,该interface主要是提供访问表进行增删改查的接口。...使用对应增删改查注解标识方法 @Database 声明数据库(为abstract),该注解属性entities声明该数据库的所有表,version表示该数据库的版本,数据库声明返回Dao实例的方法...使用流程 通过Room的静态方法databaseBuilder传入context,数据库的class对象,数据库的名称(db结尾)调用build函数就创建了数据库 数据类: @Entity(tableName...只是定义了访问数据库的接口,数据库也只是个抽象类返回Dao实例的接口还没有实现?

    34530

    实现Android本地Sqlite数据库网络传输到PC端

    ——《微卡智享》 本文长度为4578字,预计阅读7分钟 前言 在开发初期,当Android端嵌入在硬件,并且本地数据库单机业务逻辑挺多,往往要分析数据是否处理正常,需要直接从数据库查看,这时我们一般都是将数据库拷贝到...文章开头也说过,开发初期做业务测试的时候,往往查询功能还没做完,需要看数据库业务逻辑做的是否对,数据是否正常,所以需要在数据库查询。...C#:NNanoMsg 要在Nuget添加NNanoMsg Android端Demo 上图中是Android端Demo的所有类文件,主要多是的Room的类,像实体的创建,Dao的使用,还有数据库的创建等...Dao都创建在一起了 package com.vaccae.roomdemo.bean import androidx.room.ColumnInfo import androidx.room.Dao...,Demo我就是把文件整个读完后一起send的,然后一个Recv全部接收完了,完全不用自己去写循环读取判断是否接收完等。

    1.2K20

    上手使用 Room Kotlin API

    每个类的成员对应表的列。列名类型与类每个字段的名称类型一致。如果您希望改变列名而不使用类的变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...访问表的数据 如需访问表的数据,需要创建一个数据访问对象 (DAO)。也就是一个叫做 WorkDao 的接口,它会带有 @Dao 注解。...我们希望通过它实现表级别的数据插入、删除获取,所以数据访问对象中会定义相应的抽象方法。操作数据库属于比较耗时的 I/O 操作,所以需要在后台线程完成。...当实现 Dao 测试的时候,在每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备上存储数据,当创建数据库的时候,我们可以使用内存数据库。...::class) fun closeDb() { db.close() } ... } 要测试单词是否能够被正确添加到数据库,我们会创建一个 Word 实例,然后插入数据库,然后按照字母顺序找到单词列表的第一个

    97330

    上手使用 Room Kotlin API

    每个类的成员对应表的列。列名类型与类每个字段的名称类型一致。如果您希望改变列名而不使用类的变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...访问表的数据 如需访问表的数据,需要创建一个数据访问对象 (DAO)。也就是一个叫做 WorkDao 的接口,它会带有 @Dao 注解。...我们希望通过它实现表级别的数据插入、删除获取,所以数据访问对象中会定义相应的抽象方法。操作数据库属于比较耗时的 I/O 操作,所以需要在后台线程完成。...当实现 Dao 测试的时候,在每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备上存储数据,当创建数据库的时候,我们可以使用内存数据库。...::class) fun closeDb() { db.close() } ... } 要测试单词是否能够被正确添加到数据库,我们会创建一个 Word 实例,然后插入数据库,然后按照字母顺序找到单词列表的第一个

    1.5K10

    Android MVVM框架搭建(三)MMKV + Room + RxJava2

    正文   本文说的是数据库,为什么要讲这个呢,因为在实际开发,有一些数据并不需要实时更新,我们只需要在第一次打开应用的时候获取到,然后保存到手机本地数据库即可,需要的时候从数据库获取。...,下面我们来使用它,就在LoginActivity做一个测试吧,在测试之前还需要在Application对这个MVUtils类进行一个初始化。...而下面关于创建数据库、创建表、创建Dao类,都与注解有关系。 1. @Entity   下面我们来进行创建,在此之前我现在com.llw.mvvm包下新建一个db。...然后在db包下新建一个bean,bean包下新建一个Image类,我们可以分析一下需要存到数据库的值,是否所有数据都要存入,不要做没必要的事情,那是给自己找事。...@Dao   在db包下新建一个daodao包下新建一个ImageDao接口,里面的代码如下: @Dao public interface ImageDao { @Query("SELECT

    1.2K20

    Android MVVM框架搭建(三)MMKV + Room + RxJava2

    正文   本文说的是数据库,为什么要讲这个呢,因为在实际开发,有一些数据并不需要实时更新,我们只需要在第一次打开应用的时候获取到,然后保存到手机本地数据库即可,需要的时候从数据库获取。...,下面我们来使用它,就在LoginActivity做一个测试吧,在测试之前还需要在Application对这个MVUtils类进行一个初始化。...而下面关于创建数据库、创建表、创建Dao类,都与注解有关系。 1. @Entity   下面我们来进行创建,在此之前我现在com.llw.mvvm包下新建一个db。...然后在db包下新建一个bean,bean包下新建一个Image类,我们可以分析一下需要存到数据库的值,是否所有数据都要存入,不要做没必要的事情,那是给自己找事。...@Dao   在db包下新建一个daodao包下新建一个ImageDao接口,里面的代码如下: @Dao public interface ImageDao { @Query("SELECT

    1.3K31

    Jetpack组件之Room

    在注释添加与数据库关联的实体列表。 包含具有0个参数且返回使用@Dao注释的类的抽象方法。 Entity:表示数据库的表。 DAO:包含用于访问数据库的方法。...应用使用 Room 数据库来获取与该数据库关联的数据访问对象 (DAO)。然后,应用使用每个 DAO 从数据库获取实体,然后再将对这些实体的所有更改保存回数据库。...最后,应用使用实体来获取设置与数据库的表列相对应的值。Room架构图如图所示。 使用 创建数据库。...如果应用不支持使用全文搜索,可以将数据库的某些列编入索引,加快查询速度,通过@Entity注解添加indices,列出要在索引或符合索引包含的列名称。...与LiveDataViewModel的结合 当Room数据库的数据发生变化时 ,能够通过LiveData组件通知View层,实现数据的自动更新。

    1.9K20

    Kotlin 协程 Android SQLite API 的线程模型

    在我们为 Room 添加协程的支持期间,我们遇到并解决了在协程模型 Android SQL API 没想到的一些问题。在本篇文章,我们会向您阐述我们遇到的这些问题,以及我们的解决方案。...withTransaction API 在上下文中创建了三个关键元素: 单线程调度器,用于执行数据库操作; 上下文元素,帮助 DAO 函数判断其是否处在事务; ThreadContextElement...在我们的例子,这个值是没有意义的,在 Room 也只需要确定这个值是否存在即可。...Room 的阻塞函数,包含 DAO 生成的那些,在它们被事务协程调用后会被特殊处理,用来保证它们不会在其他的调度器上运行。...通过将 ThreadContextElement 添加到协程上下文中,并从 DAO 函数访问它,我们可以验证阻塞函数是否处于正确的作用域中。如果不是, 我们会抛出异常而不是造成死锁 。

    1.9K20

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

    在注释添加与数据库关联的实体列表。 包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。...Entity:表示数据库的表。 DAO:包含用于访问数据库的方法。 应用使用 Room 数据库来获取与该数据库关联的数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库获取实体,然后再将对这些实体的所有更改保存回数据库。最后,应用使用实体来获取设置与数据库的表列相对应的值。 Room 不同组件之间的关系图 ?...01 简单使用 按上面Room的介绍,我们要创建三个主要组件@Database,@Entity@Dao 类Entity创建 package com.vaccae.roomdemo.bean import...运行后可以看到,我们创建的5条信息也已经显示了出来,创建成功的数据库在虚拟机下data/data/程序/database/下的三个文件 ?

    1.1K20

    手把手教你搭建android模块化项目框架(七)存储之room

    初始化room,这里我与官方处理的方式略有差异根据我们的模块化方案,room初始化我们放置在:features:feature_common:common_room_db模块@SuppressLint...context.applicationContext, AppDataBase::class.java, "android_room_db.db...根据我们的模块化方案,其中Entity放置在:features:feature_common:common_room_db模块,Model类及转换类放置在data_xxxx模块,依赖关系为,data_xxxxx...根据我们的模块化方案,dao存储在:features:feature_common:common_room_db模块//这里注意,增删改查都可以使用@Query操作符,只需要在后边写上需要操作的语句即可...//sync方式需要创建room时调用allowMainThreadQueries(),否则会报错//Async方式需要在协程中使用。

    25920

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

    一、Room 框架使用核心要点 1、build.gradle 构建脚本配置说明 对于 Room 框架 来说 , 使用 Java 语言 开发使用 Kotlin 语言 开发 , 需要在 build.gradle...Int) constructor(id: Int) 构造函数 ; /** * 默认的构造方法给 Room 框架使用 */ constructor(id: Int...// 如果要在主线程操作数据库需要调用该函数 .build() 5、调用 Room 框架访问数据库 首先 , 获取 RoomDatabase 数据库实例类...' id 'kotlin-kapt' 导入 Room 依赖库 编译时生成代码的 注解处理器 ; // 导入 Room 依赖库 implementation 'androidx.room...import androidx.room.Ignore import androidx.room.PrimaryKey /** * 定义数据库表 Entity 实体 / 同时定义数据库表 对鹰的实体类

    40930

    Android架构组件Room指南

    Room主要包含三个部分: Database : 持有DBDAO Entity : 定义POJO类,即数据表结构 DAO(Data Access Objects) : 定义访问数据(增删改查)的接口...@ForeignKey注解中有两个属性onDeleteonUpdate, 这两个属性对应ForeignKey的onDelete()onUpdate(), 通过这两个属性的值来设置当User对象被删除...), 即发生冲突时替换原有数据 @Update@Delete 可以定义int类型返回值,指更新/删除的函数 DAO的增删改方法的定义都比较简单,这里不展开讨论,下面更多的聊一下查询方法。...支持返回RxJava2 的Flowablbe, MaybeSingle对象,对于使用RxJava的项目可以很好的衔接, 但需要在gradle添加该依赖:android.arch.persistence.room...创建数据库 RoomDataBase类似SQLite APISQLiteOpenHelper,是提供DB操作的切入点,但是除了持有DB外, 它还负责持有相关数据表(Entity)的数据访问对象(DAO

    1.4K10

    探索Android架构组件Room

    Room主要包含三个部分: Database: 持有DBDAO Entity: 定义POJO类,即数据表结构 DAO(Data Access Objects) : 定义访问数据(增删改查)的接口 其关系如下图所示...的参数存在冲突时, 可以设置 属性的值来定义冲突的解决策略, 比如代码定义的是 , 即发生冲突时替换原有数据 可以定义 类型返回值,指更新/删除的函数 DAO的增删改方法的定义都比较简单,这里不展开讨论...Room会实现更新LiveData的代码。 : Room 支持返回RxJava2 的 , 对象,对于使用RxJava的项目可以很好的衔接, 但需要在gradle添加该依赖: 。...创建数据库 RoomDataBase类似SQLite APISQLiteOpenHelper,是提供DB操作的切入点,但是除了持有DB外, 它还负责持有相关数据表(Entity)的数据访问对象(DAO...Room提供了Migration类来实现数据库的升级: 在创建Migration类时需要指定 , 代码 的startVersionendVersion是递增的, Migration其实是支持从版本

    1.7K50

    Android—Room数据库(介绍)

    前言 Google终于发布了一个SQLite相关的库了???。之前一直都是在SQLite、XUtils、greenDao、Realm这些数据库之间来回折腾。现在终于有一个更“正统”数据库了。...Room是什么? Room是一个持久性数据库。 Room持久性库提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。 为什么会选择Room?...因为Room有下面几个优点: ① SQL查询在编译时就会验证 - 在编译时检查每个@Query@Entity等,这就意味着没有任何运行时错误的风险可能会导致应用程序崩溃(并且它不仅检查语法问题,还会检查是否有该表...1、在app/build.gradle添加以下依赖 implementation 'android.arch.persistence.room:runtime:1.0.0' annotationProcessor...接下来,需要为我们的实体创建DAO

    1.1K50
    领券