文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Android】Room数据库的使用

2023-09-06 19:19

关注

简介

Room 是在 SQLite 的基础上推出的 Android 库,它是 Google 官方对数据库操作的推荐方式。使用 Room 可以更方便、高效地操作 SQLite 数据库。

使用

添加依赖

在使用 Room 之前,需要在项目中添加 Room 相关的依赖。在 build.gradle 文件中添加以下依赖:

dependencies {    def room_version = "2.3.0"    implementation "androidx.room:room-runtime:$room_version"    kapt "androidx.room:room-compiler:$room_version"}

在上面的依赖中,我们添加了 room-runtimeroom-compiler 两个依赖。其中,room-runtime 包含了 Room 库的核心功能,可以让我们进行数据库操作。而 room-compiler 则提供了一些必要的代码生成工具,帮助我们更方便地使用 Room。

数据库实体类

在使用 Room 之前,需要先定义数据表的结构。在 Room 中,数据表结构由实体类来定义。在实体类上使用 @Entity 注解来表示它对应一个数据表。以下是一个定义用户表的实体类:

@Entity(tableName = "user")data class User(    @PrimaryKey(autoGenerate = true) val id: Int = 0,    val name: String,    val age: Int)

在上面的代码中,我们使用 @Entity 注解将User类标记为一个数据表,其中:

tableName 表示此数据表的名称。
PrimaryKey 注解表示id字段是这个表的主键,并使用 autoGenerate = true 属性来表示 id 是自动生成的。

数据库访问对象(DAO)

在 Room 中,通过定义 DAO(Data Access Object) 接口来操作数据库。DAO 是一个抽象接口,其中定义了一些操作数据库的方法,例如增删改查等。在 DAO 接口上使用 @Dao 注解标记该接口。

以下是一个定义对用户表增删改查的 UserDao 接口:

@Daointerface UserDao {    @Insert    suspend fun insert(user: User)    @Update    suspend fun update(user: User)    @Delete    suspend fun delete(user: User)    @Query("SELECT * FROM user WHERE id = :id")    suspend fun getById(id: Int): User    @Query("SELECT * FROM user")    suspend fun getAll(): List<User>}

在上面的代码中,我们定义了插入、更新和删除用户记录的方法,以及根据 ID 获取用户和获取所有用户记录的方法。需要注意的是,我们为每一个方法都添加了 suspend 关键字,这意味着这些方法在协程中运行。

在上面的代码中,我们使用了 @Insert@Update@Delete@Query 注解来定义相应的操作。具体来说:

@Insert 注解用来定义插入数据的操作。
@Update 注解用来定义更新数据的操作。
@Delete 注解用来定义删除数据的操作。
@Query 注解用来定义查询数据的操作。在 Query 注解中,我们使用了 SQLite 语法来进行查询操作。

数据库

在定义好实体类和 DAO 接口之后,就可以定义数据库了。Room 中只有一个数据库实例,因此我们只需要定义一个具有 @Database 注解的类即可。

以下是一个定义用户数据库的 Database 类:

@Database(entities = [User::class], version = 1)abstract class UserDatabase : RoomDatabase() {    abstract fun userDao(): UserDao    companion object {        private var INSTANCE: UserDatabase? = null        fun getDatabase(context: Context): UserDatabase {            return INSTANCE ?: synchronized(this) {                val instance = Room.databaseBuilder(                    context.applicationContext,                    UserDatabase::class.java,                    "user_database"                ).build()                INSTANCE = instance                instance            }        }    }}

在上面的代码中,我们使用了 @Database 注解来标记 UserDatabase 类是一个数据访问对象。其中:

entities 属性表示此数据库中包含的实体类列表。
version 属性表示此数据库的版本号。
我们还定义了一个abstract的方法来获取 UserDao 实例。同时,我们还定义了一个companion object来提供获取数据库实例的静态方法。

使用

在定义好数据库后,我们可以开始使用它了。以下是一个使用示例:

// 获取数据库实例val db = UserDatabase.getDatabase(context)// 获取 UserDao 实例val userDao = db.userDao()// 插入用户val user = User(name = "xiaoming", age = 18)userDao.insert(user)// 更新用户user.age = 20userDao.update(user)// 查询所有用户val userList = userDao.getAll()// 查询指定用户val id = 1val user = userDao.getById(id)

在上面的代码中,我们首先获取 UserDatabase 实例,然后获取 UserDao 实例。接下来,我们使用 UserDao 实例进行插入、更新和查询操作。

需要注意的是,由于我们在 UserDao 中为每个方法添加了 suspend 关键字,因此调用这些方法时需要使用协程来运行。

来源地址:https://blog.csdn.net/qq_43358469/article/details/131231432

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯