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

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()

http://www.lryc.cn/news/400126.html

相关文章:

  • vue实现动态图片(gif)
  • win11系统设置允许无密码远程桌面连接
  • 使用 PyAMF / Django 实现 Flex 类映射
  • 算法思想总结:字符串
  • 滑块拼图验证码识别
  • Activity启动流程
  • PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践
  • 使用SOAP与TrinityCore交互(待定)
  • QQ频道导航退出
  • MySQL里的累计求和
  • Python爬虫速成之路(3):下载图片
  • 同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器
  • ChatGPT提问获取高质量答案的艺术PDF下载书籍推荐分享
  • 微信小程序中的数据通信
  • everything搜索不到任何文件-设置
  • python如何结束程序运行
  • InnoDB
  • spark运行报错:Container killed by YARN for exceeding memory limits
  • (三)大模型/人工智能/机器学习/深度学习/NLP
  • 数学基础 -- 三角学
  • 基于BitMap的工作日间隔计算
  • sqlite3 — DB-API 2.0 interface for SQLite databases
  • Spring Boot中的安全配置与实现
  • DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything
  • JAVA简单封装UserUtil
  • 【TOOLS】Chrome扩展开发
  • 分享WPF的UI开源库
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
  • JVM:类加载器
  • 支持向量机 (support vector machine,SVM)