使用 Room 2.x 将数据保存到本地数据库

如果您的应用处理大量结构化数据,那么在本地保留这些数据会带来许多好处。最常见的使用场景是缓存相关的数据,这样一来,当设备无法访问网络时,您仍然可以在离线状态下浏览该内容。

Room 持久性库在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。

设置 Room 2.x

如需在应用中使用 Room 2.x,请将以下依赖项添加到应用的 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 Symbol Processing (KSP)
    // ksp("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 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")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")
}

主要组件

Room 有三个主要组件:

  • 数据库类 ,用于保存数据库并作为应用持久性数据底层连接的主要访问点。
  • 数据实体 ,用于表示应用的数据库中的表。
  • 数据访问对象 (DAO) ,为您的应用提供在数据库中查询、更新、插入和删除数据的方法。

图 1 说明了 Room 的不同组件之间的关系。

图 1.Room 库架构的示意图。

实现示例

// Entity
@Entity
data class User(
    @PrimaryKey