返回

Jetpack系列之Room数据库|纯干货|让你秒懂Room|轻松掌握

Android

Room数据库:Android 持久化利器

在Android开发中,持久化数据是至关重要的,它允许应用在设备重启或卸载后仍然保留数据。而Room数据库是一个轻量级、强大且易于使用的持久化库,它建立在SQLite之上,旨在简化Android应用中的数据库操作。

Room的构成

Room由以下主要组件组成:

  • 数据表: 表示数据库中的表。
  • 数据访问对象(DAO): 定义对数据表的查询和操作。
  • 数据库: 包含数据表和DAO的抽象层。

入门 Room

要使用Room,首先需要在项目中添加依赖项:

dependencies {
    implementation "androidx.room:room-runtime:2.5.0-alpha03"
    annotationProcessor "androidx.room:room-compiler:2.5.0-alpha03"
}

然后,配置编译器选项:

android {
    ...
    dataBinding {
        enabled = true
    }
}

定义数据表

数据表是数据库中的基本结构,它包含列和约束。以下是一个定义图书表的示例:

@Entity(tableName = "books")
data class Book(
    @PrimaryKey(autoGenerate = true) val id: Int,
    val title: String,
    val author: String,
    val price: Double
)

创建 DAO 类

DAO类定义了对数据表的查询和操作。以下是一个定义图书DAO的示例:

@Dao
interface BookDao {
    @Query("SELECT * FROM books")
    fun getAll(): List<Book>

    @Query("SELECT * FROM books WHERE id = :id")
    fun getById(id: Int): Book

    @Insert
    fun insert(book: Book)

    @Update
    fun update(book: Book)

    @Delete
    fun delete(book: Book)
}

定义数据库

数据库类将数据表和DAO整合在一起,并生成数据类。以下是如何定义数据库的示例:

@Database(entities = [Book::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun bookDao(): BookDao

    companion object {
        private var instance: AppDatabase? = null

        @Synchronized
        fun getInstance(context: Context): AppDatabase {
            if (instance == null) {
                instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "app-db"
                )
                .build()
            }
            return instance!!
        }
    }
}

升级 Room 数据库

当更改数据表结构时,需要升级Room数据库。以下是如何升级数据库的示例:

@Database(entities = [Book::class], version = 2)
abstract class AppDatabase : RoomDatabase() {
    ...
}

Room 与 RxJava 配合使用

RxJava是一个异步编程库,它可以与Room很好地配合使用。以下是如何将RxJava与Room集成的示例:

Observable.fromCallable { database.bookDao().getAll() }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { books -> ... }

结语

通过本文的深入浅出讲解,相信大家已经对Room数据库有了全面的理解和掌握。Room是一个简单易用、功能强大的持久化库,它可以大幅提升Android应用中的数据管理效率。希望本文能帮助大家在Android开发中游刃有余地使用Room数据库,打造更稳定、高效的应用。