Android Room 持久化库的先容及使用方法

打印 上一主题 下一主题

主题 800|帖子 800|积分 2400

Android Room 是 Android Jetpack 组件之一,是 Google 官方推出的用于简化 SQLite 数据库操作的持久化库。它提供了一个抽象层,答应开发者在 SQLite 数据库上执行常见的 CRUD 操作,同时处置惩罚数据库毗连、数据迁移和查询优化等底层细节。
Android Room 的主要优点包罗:

  • 简化的API:Room 提供了轻便的注解和查询语言,使得数据库操作更加直观和易于编写。
  • 编译时检查:Room 在编译时对 SQL 语句进行检查,可以提前发现错误,制止在运行时出现问题。
  • 数据库迁移:Room 支持数据库结构的升级和迁移,可以轻松地处置惩罚应用程序版本更新时的数据迁移问题。
  • 响应式编程:Room 结合 LiveData 或 RxJava,可以实现数据库查询的响应式编程,实时更新 UI。
使用 Android Room 的根本步骤包罗:

  • 界说实体类:使用注解在 Java 或 Kotlin 类中界说数据库表和字段。
  • 创建数据访问对象(DAO):界说用于执行数据库操作的接口或抽象类,并使用注解指定对应的 SQL 查询语句。
  • 创建数据库:使用注解和数据库设置类来创建数据库,并指定相关的实体类和版本号。
  • 执行数据库操作:通过调用 DAO 中界说的方法,即可对数据库进行增删改查操作。
Android Room 提供了一个简朴而强大的方式来进行数据库操作,是开发 Android 应用程序时的首选选择之一。它的设计理念是为了提供更好的性能、更高的可靠性和更简朴的开发体验。
下面是Android Room的根本使用方法。

  • 添加Room依靠
    在项目标build.gradle文件中,添加以下依靠:
    1. def room_version = "2.6.1"
    2. implementation "androidx.room:room-runtime:$room_version"
    3. // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    4. // See KSP Quickstart to add KSP to your build
    5. ksp "androidx.room:room-compiler:$room_version"
    6. //如果需要,也可以引入以下依赖
    7. // If this project only uses Java source, use the Java annotationProcessor
    8. // No additional plugins are necessary
    9. annotationProcessor "androidx.room:room-compiler:$room_version"
    10. // optional - RxJava2 support for Room
    11. implementation "androidx.room:room-rxjava2:$room_version"
    12. // optional - RxJava3 support for Room
    13. implementation "androidx.room:room-rxjava3:$room_version"
    14. // optional - Guava support for Room, including Optional and ListenableFuture
    15. implementation "androidx.room:room-guava:$room_version"
    16. // optional - Test helpers
    17. testImplementation "androidx.room:room-testing:$room_version"
    18. // optional - Paging 3 Integration
    19. implementation "androidx.room:room-paging:$room_version"
    复制代码
  • 创建实体类
    创建一个Kotlin类,表示数据库中的一个表。比方,如果要创建一个名为"User"的用户表,可以编写如下代码:
    1. @Entity(tableName = "users")
    2. data class User(
    3.      @PrimaryKey val id: Int,
    4.      val name: String,
    5.      val age: Int
    6. )
    复制代码
  • 创建数据访问对象(DAO)
    创建一个接口,用于界说访问数据库的方法。比方,如果要访问"User"表,可以编写如下代码:
    1. @Dao
    2. interface UserDao {
    3.     @Insert
    4.     suspend fun insert(user: User)
    5.     @Query("SELECT * FROM users")
    6.     suspend fun getAllUsers(): List<User>
    7.     @Query("SELECT * FROM users WHERE id = :id")
    8.     suspend fun getUserById(id: Int): User
    9.    
    10.     @Query("SELECT * FROM users WHERE id IN (:ids)")
    11.     suspend fun getUserByIds(ids: List<Int>): List<User>
    12.     @Update
    13.     suspend fun updateUser(user: User)
    14.     @Delete
    15.     suspend fun deleteUser(user: User)
    16. }
    复制代码
  • 创建数据库类
    创建一个抽象类,继续自RoomDatabase,并使用@Database注解进行标志。在类中界说一个抽象方法,返回之前创建的DAO接口的实例。比方,如果要创建名为"AppDatabase"的数据库,可以编写如下代码:
    1. @Database(entities = [User::class], version = 1)
    2. abstract class AppDatabase : RoomDatabase() {
    3.     abstract fun userDao(): UserDao
    4.    
    5.         companion object {
    6.        
    7.         @Volatile
    8.         private var INSTANCE: AppDatabase? = null
    9.         //单例
    10.         fun getDatabase(context: Context): AppDatabase {
    11.             return INSTANCE ?: synchronized(this) {
    12.                 val instance = Room.databaseBuilder(
    13.                     context.applicationContext,
    14.                     AppDatabase::class.java,
    15.                     "app_database")
    16.                     .build()
    17.                 INSTANCE = instance
    18.                 instance
    19.         }
    20.     }
    21. }
    复制代码
  • 初始化数据库
    在应用程序的入口处,初始化数据库实例。比方,可以将以下代码放在Application类的onCreate()方法中:
    1. val database = AppDatabase.getDatabase(applicationContext)
    复制代码
  • 使用数据库
    使用之前界说的DAO接口来执行数据库操作。
    1. // 插入用户
    2. val user = User(1, "John Doe", 25)
    3. database.userDao().insert(user)
    4. // 获取所有用户
    5. val users = database.userDao().getAllUsers()
    6. // 根据id获取用户
    7. val user = database.userDao().getUserById(1)
    8. //查询指定的多个ID
    9. val list = listOf(1,2,3)
    10. val users1 = database.userDao().getUserByIds(list)
    11. // 更新用户
    12. user.name = "Jane Doe"
    13. database.userDao().updateUser(user)
    14. // 删除用户
    15. 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表