Room-数据持久化存储(进阶)

Room数据库操作:复杂数据处理、Flow刷新UI与版本升级
本文详细介绍了Android Room数据库如何处理复杂数据,包括使用@TypeConverter进行对象与基本类型转换,以及在数据库升级过程中如何进行表的增删改。同时,讲解了如何配合Flow实现全局UI的自动刷新,讨论了数据库版本升级的策略,如清空重建和按版本号升级,并给出了相应的示例代码。


前言

上一篇文章我们讲述room的基本用法.
本篇将讲述: 复杂数据处理, 配合Flow实现全局UI刷新, DB版本升级方式.


Room的其他功能

以下功能了解即可

  • 定义对象间的关系: 有一对多, 多对多什么的. 但博主暂时没有业务需要在 App 中构建过于庞大且复杂的数据库. 而且构建这种关系的对象时, 必须要额外创建一个复合对象来容纳他们.
  • 定义视图: 一般多表关联的复杂查询才需要视图
  • 预填充数据库: 有 应用资源预填充, 文件系统预填充, 数据库的迁移 等

需要了解的, 请看查看官方文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、复杂数据处理?

有的时候我们会对象套对象, 对象套集合, 例如:

@Entity
class RoomTwoEntity {
   
   
    @PrimaryKey
    var id: String = ""
    @ColumnInfo
    var nickname: String? = null

	@ColumnInfo
    var imgs: MutableList<Image>? = null    //集合实体

    @ColumnInfo
    var room: RoomEntity? = null	//其他实体
}

class Image(val res: Int)

上面 @ColumnInfo 直接写是不行的. room也不知道它算什么类型.
我们为这些实体单独创建表, 再管理关联关系的话, 相当麻烦
@TypeConverter 会让这件事非常简单.

1. @TypeConverter

类型转换器, 它的本质就是:

插入库表时, 将实体类型转换为 基本类型. 查询时再讲基本类型转换为实体类型; 例如: 对象转换为JSON, Date转换为Long等

第一步: 编写转换器

class MyConverters {
   
   
    @TypeConverter
    //Image集合 转换为 Json字符串
    fun imgsToStr(imgList: MutableList<Image>? = null): String? {
   
   
        imgList ?: return null
        return Gson().toJson(imgList)
    }

    @TypeConverter
    //Json字符串 转换为 Image集合
    fun strToImgs(imgStr: String?): MutableList<Image>? {
   
   
        imgStr ?: return null
        return imgStr.toBeanList()
    }

    @TypeConverter
    //实体 转换为 Json字符串
    fun roomToStr(room: RoomEntity?): String? {
   
   
        room ?: return null
        return Gson().toJson(room)
    }

    @TypeConverter
    //Json字符串 转换为 实体
    fun strToRoom(str: String?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值