当前位置: 首页 > news >正文

Android Room 持久化库的介绍及使用方法

Android Room 是 Android Jetpack 组件之一,是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层,允许开发者在 SQLite 数据库上执行常见的 CRUD 操作,同时处理数据库连接、数据迁移和查询优化等底层细节。

Android Room 的主要优点包括:

  1. 简化的API:Room 提供了简洁的注解和查询语言,使得数据库操作更加直观和易于编写。
  2. 编译时检查:Room 在编译时对 SQL 语句进行检查,可以提前发现错误,避免在运行时出现问题。
  3. 数据库迁移:Room 支持数据库结构的升级和迁移,可以轻松地处理应用程序版本更新时的数据迁移问题。
  4. 响应式编程:Room 结合 LiveData 或 RxJava,可以实现数据库查询的响应式编程,实时更新 UI。

使用 Android Room 的基本步骤包括:

  1. 定义实体类:使用注解在 Java 或 Kotlin 类中定义数据库表和字段。
  2. 创建数据访问对象(DAO):定义用于执行数据库操作的接口或抽象类,并使用注解指定对应的 SQL 查询语句。
  3. 创建数据库:使用注解和数据库配置类来创建数据库,并指定相关的实体类和版本号。
  4. 执行数据库操作:通过调用 DAO 中定义的方法,即可对数据库进行增删改查操作。

Android Room 提供了一个简单而强大的方式来进行数据库操作,是开发 Android 应用程序时的首选选择之一。它的设计理念是为了提供更好的性能、更高的可靠性和更简单的开发体验。

下面是Android Room的基本使用方法。

  1. 添加Room依赖
    在项目的build.gradle文件中,添加以下依赖:

     def room_version = "2.6.1"implementation "androidx.room:room-runtime:$room_version"// If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)// See KSP Quickstart to add KSP to your buildksp "androidx.room:room-compiler:$room_version"//如果需要,也可以引入以下依赖// If this project only uses Java source, use the Java annotationProcessor// No additional plugins are necessaryannotationProcessor "androidx.room:room-compiler:$room_version"// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"// optional - Guava support for Room, including Optional and ListenableFutureimplementation "androidx.room:room-guava:$room_version"// optional - Test helperstestImplementation "androidx.room:room-testing:$room_version"// optional - Paging 3 Integrationimplementation "androidx.room:room-paging:$room_version"
    
  2. 创建实体类
    创建一个Kotlin类,表示数据库中的一个表。例如,如果要创建一个名为"User"的用户表,可以编写如下代码:

    @Entity(tableName = "users")
    data class User(@PrimaryKey val id: Int,val name: String,val age: Int
    )
    
  3. 创建数据访问对象(DAO)
    创建一个接口,用于定义访问数据库的方法。例如,如果要访问"User"表,可以编写如下代码:

    @Dao
    interface UserDao {@Insertsuspend fun insert(user: User)@Query("SELECT * FROM users")suspend fun getAllUsers(): List<User>@Query("SELECT * FROM users WHERE id = :id")suspend fun getUserById(id: Int): User@Query("SELECT * FROM users WHERE id IN (:ids)")suspend fun getUserByIds(ids: List<Int>): List<User>@Updatesuspend fun updateUser(user: User)@Deletesuspend fun deleteUser(user: User)
    }
    
  4. 创建数据库类
    创建一个抽象类,继承自RoomDatabase,并使用@Database注解进行标记。在类中定义一个抽象方法,返回之前创建的DAO接口的实例。例如,如果要创建名为"AppDatabase"的数据库,可以编写如下代码:

     @Database(entities = [User::class], version = 1)abstract class AppDatabase : RoomDatabase() {abstract fun userDao(): UserDaocompanion object {@Volatileprivate var INSTANCE: AppDatabase? = null//单例fun getDatabase(context: Context): AppDatabase {return INSTANCE ?: synchronized(this) {val instance = Room.databaseBuilder(context.applicationContext,AppDatabase::class.java,"app_database").build()INSTANCE = instanceinstance}}
    }
    
  5. 初始化数据库
    在应用程序的入口处,初始化数据库实例。例如,可以将以下代码放在Application类的onCreate()方法中:

    val database = AppDatabase.getDatabase(applicationContext)
    
  6. 使用数据库
    使用之前定义的DAO接口来执行数据库操作。

    // 插入用户
    val user = User(1, "John Doe", 25)
    database.userDao().insert(user)// 获取所有用户
    val users = database.userDao().getAllUsers()// 根据id获取用户
    val user = database.userDao().getUserById(1)//查询指定的多个ID
    val list = listOf(1,2,3)
    val users1 = database.userDao().getUserByIds(list)// 更新用户
    user.name = "Jane Doe"
    database.userDao().updateUser(user)// 删除用户
    database.userDao().deleteUser(user)
    

官方链接:https://android-dot-google-developers.gonglchuangl.net/jetpack/androidx/releases/room

Room 和 Flow 简介及应用:https://developer.android.google.cn/codelabs/basic-android-kotlin-training-intro-room-flow

相关文章:

Android Room 持久化库的介绍及使用方法

Android Room 是 Android Jetpack 组件之一&#xff0c;是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层&#xff0c;允许开发者在 SQLite 数据库上执行常见的 CRUD 操作&#xff0c;同时处理数据库连接、数据迁移和查询优化等底层细节。 Andr…...

Go语言中http.Transport的Keep-Alive配置与性能优化方法

在Go语言中&#xff0c;http.Transport是一个用于发送HTTP或HTTPS请求的客户端工具&#xff0c;它提供了许多可配置的参数以优化性能。其中&#xff0c;Keep-Alive配置是性能优化的关键部分。以下是对http.Transport的Keep-Alive配置与性能优化方法的详细解释&#xff1a; 一、…...

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处&#xff1a;动态切换算法或行为场景&#xff1a;实现同一功能用到不同的算法时和简单工厂对比&#xff1a;简单工厂是通过参数创建对象&#xff0c;调用同一个方法&#xff08;实现细节不同&#xff09;&#xff1b;策略模式是上下文切换对象&#xff0c;调用…...

C# 多线程 Task TPL任务并行

先总结一下 之前发展过程的要点 1&#xff1a; 为了保证多线程正确顺序执行 线程同步 2&#xff1a; 为了节省操作系统线程资源 线程池 异步 方式管理 正常来讲 使用这俩个要点 进行使用 多线程可以满足开发使用需求 但是 新的问题产生了 那就是 多个异步操作 需要编写大量的代…...

【matlab】matlab知识点及HTTP、TCP通信

1、矩阵运算 点乘&#xff1a;对于两个同维度的向量&#xff0c;点乘结果是这两个向量对应分量的乘积之和。 点除&#xff1a;是指对两个数组的对应元素进行除法运算。 点幂&#xff1a;表示元素对元素的幂运算。 >> A[1,2,3;4,5,6]; B[1,1,1;2,2,2]>> D1B.*AD…...

kalilinux - msf和永恒之蓝漏洞

Kali最强渗透工具 - metasploit metasploit是什么&#xff1f; msf是一款开源安全漏洞利用和测试工具&#xff0c;集成了各种平台上常见的溢出漏洞和流行的sheelcode&#xff0c;并持续保持更新。 具体操作 1、先切换到root用户&#xff0c;使用msfdb init命令初始化metaspl…...

网络安全测评质量管理与标准解读

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 注意说明 刚开始写过一些比较专业的分享&#xff0c;较多粉丝反应看不懂&#xff0c;本次通过大众的通俗易懂的词汇先了解概念然后再分享规范和详细的技术原理 一、网络安全测评质量管理 网络安全测…...

Cesium根据地图的缩放zoom实现不同级别下geojson行政边界的对应展示

实现效果&#xff1a; 随着地图的缩放&#xff0c;展示对应缩放级别下的行政边界。 准备数据&#xff1a; 1.国家行政边界数据 &#xff08;country.json&#xff09; 2.省级行政边界数据 &#xff08;province.json&#xff09; 3.市级行政边界数据&#xff08;city.json&…...

Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】

目录 一.shell命令以及运行原理 二.Linux权限的概念与权限管理 2.1Linux权限的概念 sudo普通用户提权 2.2Linux权限管理 2.2.1文件访问者的分类&#xff08;人&#xff09; 2.2.2文件类型和访问权限&#xff08;事物属性&#xff09; 2.2.3文件权限值的表示方法 字符…...

深入剖析 Wireshark:网络协议分析的得力工具

在网络技术的广阔领域中&#xff0c;网络协议分析是保障网络正常运行、优化网络性能以及进行网络安全防护的关键环节。而 Wireshark 作为一款开源且功能强大的网络协议分析工具&#xff0c;在网络工程师、安全专家以及网络技术爱好者中广受欢迎。本文将深入介绍 Wireshark 的功…...

【AIGC】SYNCAMMASTER:多视角多像机的视频生成

标题&#xff1a;SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页&#xff1a;https://jianhongbai.github.io/SynCamMaster/ 代码&#xff1a;https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统&#xff0c;其能识别的水果蔬菜有15种&#xff0c;# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...

Redisson中红锁(RedLock)的实现

一、什么是红锁 当在单点redis中实现redis锁时&#xff0c;一旦redis服务器宕机&#xff0c;则无法进行锁操作。因此会考虑将redis配置为主从结 构&#xff0c;但在主从结构中&#xff0c;数据复制是异步实现的。假设在主从结构中&#xff0c;master会异步将数据复制到slave中…...

小结:路由器和交换机的指令对比

路由器和交换机的指令有一定的相似性&#xff0c;但也有明显的区别。以下是两者指令的对比和主要差异&#xff1a; 相似之处 基本操作 两者都支持类似的基本管理命令&#xff0c;比如&#xff1a; 进入系统视图&#xff1a;system-view查看当前配置&#xff1a;display current…...

使用yarn命令创建Vue3项目

文章目录 1.技术栈2.创建流程2.1创建vue3项目2.2选择配置项2.3进入项目目录 3.使用Yarn启动项目3.1安装依赖3.2运行项目 1.技术栈 yarnvitevue3 2.创建流程 2.1创建vue3项目 vue create 项目名称2.2选择配置项 直接回车可选择Vue3 2.3进入项目目录 cd 项目名称默认在当前…...

Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)

前期文章中我们完成了创建第一个场景、添加轨道控制器的功能&#xff0c;接下来我们继续阐述其他的功能&#xff0c;本篇文章中主要讲述如何应用lil-GUI调试开发3D效果&#xff0c;在开始具体流程和步骤之前&#xff0c;请先查看之前的内容&#xff0c;因为该功能必须在前期内容…...

K8S集群常用命令

1&#xff0c;查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod&#xff0c;也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod&#xff0c;并且放出的信息更全&#xff08;包含了pod的ip&#xff0…...

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)

目录 1. 例题1&#xff1a;最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下&#xff1a;我最开始写了一种&#xff0c;但是解答错误&#xff0c;请看&#xff0c;给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1&#xff…...

mayavi -> python 3D可视化工具Mayavi的安装

前言 Mayavi是一个基于VTK&#xff08;Visualization Toolkit&#xff09;的科学计算和可视化工具&#xff0c;主要用于数据可视化和科学计算领域。 它提供了一系列的高级可视化工具&#xff0c;包括2D和3D图形、表面和体积渲染、流场可视化等。Mayavi可以通过Python脚本进行调…...

【C++】B2112 石头剪子布

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述游戏规则&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;解题分析与实现 &#x1f4af;我的做法实现逻辑优点与不足 &#x1f4af…...

从零开始理解JVM内存模型:如何避免OOM错误的7个实用技巧

从零开始理解JVM内存模型&#xff1a;如何避免OOM错误的7个实用技巧 第一次在线上环境遇到OOM错误时&#xff0c;我盯着控制台那行刺眼的java.lang.OutOfMemoryError整整愣了三分钟。那是一个看似普通的周二下午&#xff0c;我们的订单处理系统突然开始拒绝服务&#xff0c;而监…...

FastAPI 2.0流式AI接口上线前必须做的4项压力测试:QPS突破1200+的实测阈值与熔断配置清单

第一章&#xff1a;FastAPI 2.0流式AI接口压力测试全景认知FastAPI 2.0 引入了对异步流式响应&#xff08;如 StreamingResponse&#xff09;的深度优化&#xff0c;使大语言模型&#xff08;LLM&#xff09;类接口可原生支持 Server-Sent Events&#xff08;SSE&#xff09;、…...

智能猫砂盆:除臭静音,养猫更省心!

行业痛点分析当前智能猫砂盆领域面临两大核心挑战&#xff1a;清洁残留与安全防护。传统自动铲屎机型在完成集便动作后&#xff0c;猫砂盆底部仍会残留约15%-20%的沾尿结团猫砂&#xff08;数据表明&#xff1a;第三方实验室对6款主流机型测试结果&#xff09;&#xff0c;用户…...

游戏存档终极备份指南:用Ludusavi保护你的游戏进度

游戏存档终极备份指南&#xff1a;用Ludusavi保护你的游戏进度 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi 你是否曾因电脑重装、系统崩溃或误操作而丢失珍贵的游戏存档&#xff1f;数百小时的游戏…...

Qwen2.5-VL-7B-Instruct开源大模型:支持中文优先的多模态理解部署方案

Qwen2.5-VL-7B-Instruct开源大模型&#xff1a;支持中文优先的多模态理解部署方案 1. 项目概述 Qwen2.5-VL-7B-Instruct是一款开源的视觉-语言多模态大模型&#xff0c;特别针对中文场景进行了优化。该模型能够同时处理图像和文本输入&#xff0c;实现跨模态的理解与生成任务…...

技术揭秘:QtScrcpy如何实现跨平台Android投屏与低延迟控制

技术揭秘&#xff1a;QtScrcpy如何实现跨平台Android投屏与低延迟控制 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...

终极音乐解锁方案:在浏览器中实现加密音乐文件高效转换完整指南

终极音乐解锁方案&#xff1a;在浏览器中实现加密音乐文件高效转换完整指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地…...

DeepSeek-OCR-2效果展示:OCR结果直接生成可编辑Word/PDF双格式

DeepSeek-OCR-2效果展示&#xff1a;OCR结果直接生成可编辑Word/PDF双格式 本文展示DeepSeek-OCR-2模型的强大OCR能力&#xff0c;重点演示如何将扫描文档直接转换为可编辑的Word和PDF格式&#xff0c;让文档数字化变得简单高效。 1. 核心能力概览 DeepSeek-OCR-2是2026年1月发…...

Axure 9.0 原生组件:绘制折线图

引言在原型设计中&#xff0c;数据可视化是传递核心信息的关键手段&#xff0c;而折线图凭借 “清晰展示数据趋势” 的优势&#xff0c;广泛应用于销售波动、用户增长、指标变化等场景。Axure 9.0 作为主流原型工具&#xff0c;虽未内置现成折线图组件&#xff0c;但通过「形状…...

AI读脸术备份恢复指南:手把手教你搭建高可用人脸识别服务

AI读脸术备份恢复指南&#xff1a;手把手教你搭建高可用人脸识别服务 1. 项目背景与需求分析 人脸识别技术已经成为现代数字服务的重要组成部分&#xff0c;从电商个性化推荐到智能安防系统&#xff0c;都依赖这项技术的稳定运行。AI读脸术镜像基于OpenCV DNN深度神经网络构建…...