Android Jetpack 之 Room数据库的使用

一、前言

Android Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。而这篇文章中的主角Room正好是Jetpack 的重要库之一,Room数据库在这近几年也是Google极力推荐使用的数据库。
说到这个主角,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。处理大量结构化数据的应用可极大地受益于在本地保留这些数据。最常见的用例是缓存相关数据。这样,当设备无法访问网络时,用户仍可在离线状态下浏览相应内容。设备重新连接到网络后,用户发起的所有内容更改都会同步到服务器。
在下面的学习中,我将以Kotlin的开发环境中进行,毕竟要迎合Google大佬官方开发语言的推荐,话不多说,我们直接展开说下这个数据库是怎么使用的。


侵权删


二、为什么要使用Room

想必原生的Android数据库SQLite打击都不陌生,而本篇文章的主角Room其实就只是对原生的SQLite API进行了一层封装,使得更加流畅的访问数据库。另外它和常规的ORM框架一样,通过添加编译期注解来进行表和字段的配置,其包含了三个主要组件:

1、Databasee:包含数据库持有者,并作为应用已保留的持久关系型数据的底层连接的主要接入点;使用 @Database 注释的类应满足以下条件:是扩展 RoomDatabase 的抽象类。在注释中添加与数据库关联的实体列表。包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。
在运行时,您可以通过调用 Room.databaseBuilder() 或 Room.inMemoryDatabaseBuilder() 获取 Database 的实例。

2、Entity:表示数据库中的表,通过@Entity标识。

3、DAO:包含用于访问数据库的方法,通过@Dao标识。

二、使用步骤

1、添加依赖

Kotlin环境依赖如下:

plugins {
   
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
  }

android {
   
  defaultConfig {
   
  ...
    kapt {
   
          arguments {
   
             arg("room.schemaLocation", "$projectDir/schemas")
           }
       }
    }
}

dependencies {
   
  def room_version = "2.2.6"
  implementation "androidx.room:room-runtime:$room_version"
  kapt "androidx.room:room-compiler:$room_version"
  // optional - Kotlin Extensions and Coroutines support for Room
  implementation "androidx.room:room-ktx:$room_version"
  // optional - Test helpers
  testImplementation "androidx.room:room-testing:$room_version"
}

2、数据库表Entity的创建

通过@Entity注解标识实体类,其中tableName 表示明确表名,如果不明确表名数据库指定当前实体作为表名,@PrimaryKey注解标识主键,是唯一的值,值不能为空,我这里默认指定为0,autoGenerate = true表示主键自增; @ColumnInfo注解标识表中列信息,name =指定列中对应数据库字段名称,不指定时默认为自定义的参数名称:

@Entity(tableName = "student_info")
data class StudentEntity(
    @ColumnInfo(name = "stu_name")
    val name: String?,
    @ColumnInfo(name = "stu_sex")
    val sex: String?,
    @ColumnInfo(name = "stu_skill")
    val skill:String?,
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0
)

3、数据库Database的创建

创建数据库需要继承RoomDatabase的抽象类,并且通过@Database标识这个类,@Database中里面有几个参数可以展开说一下,entities表示要添加进来的数据库表,这里是以数组的形式添加,后续有多个表可以用逗号隔开添加进来,version表示这个数据库的版本,版本迁移时会使用到,exportSchema表示导出为文件模式,默认为true,除了添加表映射的类以及和数据库版本外,还要添加exportSchema = false否则会报警告。这个类里面还定义了获取增删改查操作接口的方法StudentDAO,下面还涉及了版本迁移的方法,当数据库表Entity中某些字段增加或减少就需要调用数据库迁移的方法,此外,打比方原来的版本(version)是1,就要改成2,下一次字段变更时,版本以此类推的增加。想要保留数据的情况下做版本迁移就需要调用addMigrations()方法,这个非常重要。

@Database(entities = [StudentEntity::class], version = 3, exportSchema = false)
abstract class StudentDB : RoomDatabase() {
   

    abstract fun getStudentDao(): StudentDAO

    companion object {
   
        //版本迁移:2->3(这个是增加字段下的迁移)
        private val MIGRATION_2_3
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是关于Android Room数据库的简单介绍和使用方法: Android Room是一种SQLite数据库的对象映射库,它提供了一种简单的方法来访问SQLite数据库,而无需编写复杂的SQL查询。它是Google推出的一种Jetpack组件,旨在帮助Android开发者更加简便地使用SQLite数据库。 下面是使用Android Room数据库的基本步骤: 1. 添加依赖项:在app/build.gradle文件中添加以下依赖项: ``` dependencies { def room_version = "2.3.0" // Room components implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // optional - Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:$room_version" // optional - RxJava support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // Test helpers testImplementation "androidx.room:room-testing:$room_version" } ``` 2. 创建实体:创建一个Java类或Kotlin数据类,用于表示数据库表中的一行数据。示例代码: ``` @Entity(tableName = "users") data class User( @PrimaryKey val id: Int, @ColumnInfo(name = "user_name") val userName: String, @ColumnInfo(name = "user_age") val userAge: Int ) ``` 3. 创建DAO:创建一个接口,其中包含用于访问数据库的方法。示例代码: ``` @Dao interface UserDao { @Query("SELECT * FROM users") fun getAllUsers(): List<User> @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertUser(user: User) @Delete fun deleteUser(user: User) } ``` 4. 创建数据库:创建一个继承自RoomDatabase的抽象类,并在其中声明用于访问DAO的抽象方法。示例代码: ``` @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } ``` 5. 初始化数据库:在应用程序的入口点处初始化数据库,并使用它来获取DAO实例。示例代码: ``` val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build() val userDao = db.userDao() ``` 6. 使用DAO:使用DAO中定义的方法来访问数据库。示例代码: ``` val allUsers = userDao.getAllUsers() userDao.insertUser(user) userDao.deleteUser(user) ``` 这些是使用Android Room数据库的基本步骤。当然,还有许多其他的高级用法和配置选项,可以根据具体需求进行学习和使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值