SQLite数据库与ROOM数据库
目录
1、SQLite数据库
目的:
基本操作:
缺点:
解决:
2、ROOM持久性库
目的:
优点:
导入依赖:
主要组件:
编辑
使用步骤:
a.定义数据实体
b.定义数据访问对象(接口)
c.定义数据库类
d.实例化并操作数据库
1、SQLite数据库
目的:
保存重复数据&结构化数据
基本操作:
- 定义架构的协定
- 创建数据库
- 信息添加到数据库
- 从数据库读取信息
- 从数据库删除信息
- 更新数据库
- 保留数据库连接,一般Activity的onDestroy()中关闭数据库
缺点:
android.database.sqlite 软件包提供Android上使用数据库所需的API,但是API级别较低
- 没有针对原始SQL查询的编译时验证,耗时又易错
- 需要使用大量样本代码在SQL查询和数据对象之间转换
解决:
强烈建议使用Room持久性库作为抽象层访问SQLite数据库中信息
2、ROOM持久性库
目的:
将数据保存到本地数据库
在SQLite上提供一个抽象层,以便充分利用SQLite&流畅访问数据库
优点:
- 提供针对SQL查询的编译时验证
- 提供方便注释,可最大限度减少重复和容易出错的代码样板
- 简化数据库迁移路径
导入依赖:
讲下面依赖项添加到build.gradle文件
dependencies {val room_version = "2.6.1"implementation("androidx.room:room-runtime:$room_version")annotationProcessor("androidx.room:room-compiler:$room_version")// To use Kotlin annotation processing tool (kapt)kapt("androidx.room:room-compiler:$room_version")// To use Kotlin Symbol Processing (KSP)ksp("androidx.room:room-compiler:$room_version")// optional - Kotlin Extensions and Coroutines support for Roomimplementation("androidx.room:room-ktx:$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")
}
主要组件:
- 数据库类(Database):用于保存数据库&外界访问数据库
- 数据实体(Entities):表
- 数据访问对象(Dao):提供数据库增删改查的方法
使用步骤:
a.定义数据实体
@Entity
data class User(@PrimaryKey val uid: Int,@ColumnInfo(name = "first_name") val firstName: String?@ColumnInfo(name = "last_name") val lastName: String?
)
b.定义数据访问对象(接口)
@Dao
interface UserDao {@Query("SELECT * FROM user")fun getAll(): List<User>@Query("SELECT * FROM user WHERE uid IN (:userIds)")fun loadAllByIds(userIds: IntArray): List<User>@Query("SELECT * FROM user WHERE first_name LIKE :first AND " +"last_name LIKE :last LIMIT 1")fun findByName(first: String, last: String): User@Insertfun insertAll(vararg users: User)@Deletefun delete(user: User)
}
c.定义数据库类
- 带有@Database注解,注解相关联 数据实体
- 该类为抽象类,继承并扩展RoomDatabase
- 定义获取Dao类的抽象方法
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {abstract fun userDao(): UserDao
}
d.实例化并操作数据库
val db = Room.databaseBuilder(applicationContext,AppDatabase::class.java, "database-name").build()val userDao = db.userDao()
val users: List<User> = userDao.getAll()
相关文章:
SQLite数据库与ROOM数据库
目录 1、SQLite数据库 目的: 基本操作: 缺点: 解决: 2、ROOM持久性库 目的: 优点: 导入依赖: 主要组件: 编辑 使用步骤: a.定义数据实体 b.定义数据访问对象(接…...
vue实现动态图片(gif)
目录 1. 背景 2. 分析 3. 代码实现 1. 背景 最近在项目中发现一个有意思的小需求,鼠标移入一个盒子里,然后盒子里的图就开始动起来,就像一个gif一样,然后鼠标移出,再按照原来的变化变回去,就像变形金刚…...
win11系统设置允许无密码远程桌面连接
在windows11系统中设置允许无密码远程桌面连接,可以通过以下步骤进行操作: 1、启用远程桌面功能:首先,确保您的Windows 11是专业版,因为家庭版默认不支持远程桌面功能。您可以通过“设置” -> “系统” -&…...
使用 PyAMF / Django 实现 Flex 类映射
1、问题背景 PyAMF 是一个用于在 Flex 和 Python 之间进行通信的库,在使用 PyAMF 与 Flex 应用进行通信时,经常会遇到错误。例如,在发送一个 Flex Investor 对象到 Python 时,会得到一个 ‘KeyError: first_name’ 的错误。这是因…...
算法思想总结:字符串
一、最长公共前缀 . - 力扣(LeetCode) 思路1:两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…...
滑块拼图验证码识别
通常滑块验证码都是横向滑动,今天看到一个比较特别的滑块拼图验证码,他不仅能在横向上滑动,还需要进行纵向滑动。如下图所示: 他的滑块在背景图片的左上角,需要鼠标拖动左上角的滑块,移动到背景图的缺口位置…...
Activity启动流程
1 冷启动与热启动 应用启动分为冷启动和热启动。 冷启动:点击桌面图标,手机系统不存在该应用进程,这时系统会重新fork一个子进程来加载Application并启动Activity,这个启动方式就是冷启动。 热启动:应用的热启动比冷…...
PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践
大家好,我是码农先森。 我之前待过一个做 ToB 业务的公司,主要是研发以会员为中心的 SaaS 平台,其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」,这个租户可以拥有一个或多个子系…...
使用SOAP与TrinityCore交互(待定)
原文:SOAP with TrinityCore | TrinityCore MMo Project Wiki 如何使用SOAP与TC交互 SOAP代表简单对象访问协议,是一种类似于REST的基于标准的web服务访问协议的旧形式。只要必要的配置到位,您就可以利用SOAP向TrinityCore服务器发送命令。 …...
QQ频道导航退出
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
MySQL里的累计求和
在MySQL中,你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和,可以使用OVER()子句与ORDER BY子句结合,进行窗口函数的操作。 以下是一个简单的例子,假设我们有一个名为sales的表,它有两个列&#x…...
Python爬虫速成之路(3):下载图片
hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命Coding-CSDN博客 &a…...
同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器
同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器 同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器&am…...
ChatGPT提问获取高质量答案的艺术PDF下载书籍推荐分享
ChatGPT高质量prompt技巧分享pdf, ChatGPT提问获取高质量答案的艺术pdf。本书是一本全面的指南,介绍了各种 Prompt 技术的理解和利用,用于从 ChatGPTmiki sharing中生成高质量的答案。我们将探讨如何使用不同的 Prompt 工程技术来实现不同的目…...
微信小程序中的数据通信
方法1: 使用回调函数 在app.js中:可以在修改globalData后执行一个回调函数,这个回调函数可以是页面传递给app的一个更新函数。// app.js App({globalData: {someData: ,},setSomeData(newData, callback) {this.globalData.someData = newData;if (typeof callback === funct…...
everything搜索不到任何文件-设置
版本: V1.4.1.1024 (x64) 问题:搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含...
python如何结束程序运行
方法1:采用sys.exit(0),正常终止程序,从图中可以看到,程序终止后shell运行不受影响。 方法2:采用os._exit(0)关闭整个shell,从图中看到,调用sys._exit(0)后整个shell都重启了(RESTAR…...
InnoDB
InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。 1. 数据存储结构 表空间(Tablespace) InnoDB 使用表空间来管理数据存储,表空间可以是共享…...
spark运行报错:Container killed by YARN for exceeding memory limits
用spark跑数据量大的离线调度任务报错:Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled becaus…...
(三)大模型/人工智能/机器学习/深度学习/NLP
一.模型 模型,简单来说,就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的,也可以是虚拟的,目的是为了帮助我们更好地理解和预测所描述的对象。在生活中,模型无处不在,它们以各种形…...
基于最优潮流与随机噪声的欧洲电网合成数据生成方法
1. 项目概述:为什么我们需要一个“人造”的欧洲电网?在电力系统这个行当里干了十几年,我越来越觉得,我们正处在一个尴尬的十字路口。一方面,以深度学习为代表的机器学习技术,正以前所未有的热情涌入电力系统…...
保姆级教程:在Ubuntu 22.04的GNOME 42上搞定Blur My Shell毛玻璃效果(附自动修复脚本)
在Ubuntu 22.04上实现GNOME桌面极致毛玻璃美化的完整指南 第一次看到MacOS的毛玻璃效果时,那种若隐若现的层次感就让我着迷。但在Linux上,特别是GNOME桌面环境中,要实现这种效果往往需要一些技巧。经过多次尝试和调整,我总结出了这…...
WSL2 2023史诗级更新实测:你的.wslconfig文件真的配对了吗?(从版本检查到稀疏VHD全流程)
WSL2 2023史诗级更新实战:从版本适配到性能调优全解析如果你最近尝试在WSL2中配置网络功能时遇到各种"玄学问题",比如代理失效、端口转发异常或是磁盘空间莫名被占满,很可能是因为忽略了版本兼容性这个关键前提。2023年9月后&#…...
鸿蒙electron跨端框架PC墨案写作实战:把 Markdown 正文区做成桌面写作的中心
前言 欢迎加入鸿蒙PC开发者社区,共同打造开发者工具生态:鸿蒙PC开发者社区 :https://harmonypc.csdn.net/ 项目开源地址:https://AtomGit.com/lqjmac/ele-moanxiezuo 墨案写作这个小工具看起来轻,但真正落地时要先把…...
字节Seed基座GR3机器人的专属控制内核,具备柔性物体操控、人体姿态复刻、工业闭环作业等功能
全称:Gesture Real-Time Reinforcement Learning 全域实时姿态强化学习具身控制框架 内部代号:GR-RL V5.9.2 稳态正式版 隶属体系:字节Seed基座GR3机器人专属控制内核 核心用途:全品类柔性物体操控、人体仿生姿态复刻、工业高精度…...
RD-VLA:机器人动态思考的潜在空间迭代推理架构
1. 项目概述:为什么我们需要一个会“思考”的机器人模型?在机器人控制领域,我们一直梦想着能造出一个像人一样“聪明”的助手:让它去拿杯水,它能轻松完成;让它在一个杂乱无章的抽屉里找出并组装一个小零件&…...
别再到处找驱动了!手把手教你为ESXi 7.0 U3集成Broadcom阵列卡驱动(保姆级图文)
深度实战:为ESXi 7.0 U3定制集成Broadcom阵列卡驱动的完整指南虚拟化平台部署中最令人头疼的瞬间,莫过于当你精心准备的ESXi安装镜像在服务器上启动后,屏幕上赫然出现"No network adapter found"或"Storage controller not de…...
AI时代的个人隐私与网络安全自保——从账号密码到设备行为的完整体系
一个很多人没做但很简单的事:去搜索一下自己的真实姓名、手机号、家庭住址,看看哪些信息已经公开在网上。知道自己的暴露面,才知道要重点保护什么。 haveibeenpwned是免费、靠谱、隐私友好的数据泄露查询工具。 安全防护不追求完美࿰…...
Python异步编程深度解析:从asyncio到实战应用
Python异步编程深度解析:从asyncio到实战应用 引言 异步编程是现代Python后端开发中不可或缺的技能。作为从Python转向Rust的后端开发者,我发现Python的异步生态非常成熟,尤其是asyncio库提供了强大的异步编程能力。本文将深入探讨Python异步…...
设计模式 之 责任链模式
一搜网上讲责任链的写法都感觉好复杂?我用简单实现让你秒懂并马上用到项目里 前言 搜了一圈责任链模式的文章,要么搬出 UML 类图画半天,要么搞一堆 Handler、HandlerChain、AbstractHandler 层层嵌套,看得人头大。 今天分享一个我…...
