Android Room 学习(一)

Room简介

Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问。

该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存。 此缓存作为应用程序的唯一事实来源,允许用户在应用程序中查看关键信息的一致副本,无论用户是否具有Internet连接。

gradle中添加引用

在module的gradle中加入

implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
    kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"

在project的gradle中加入

ext {
    supportLibraryVersion = '27.1.1'
    roomVersion = "1.0.0"
}

数据库读写线程管理

因为数据库操作是耗时操作,所以不能放入主线程中,所以增加线程管理代码

open class AppExecutors constructor(
        val diskIO: Executor = DiskIOThreadExecutor(),
        val networkIO: Executor = Executors.newFixedThreadPool(THREAD_COUNT),
        val mainThread: Executor = MainThreadExecutor()
) {
    fun diskIO(): Executor {
        return diskIO
    }

    private class MainThreadExecutor : Executor {
        private val mainThreadHandler = Handler(Looper.getMainLooper())

        override fun execute(command: Runnable) {
            mainThreadHandler.post(command)
        }
    }
}
class DiskIOThreadExecutor : Executor {

    private val diskIO = Executors.newSingleThreadExecutor()

    override fun execute(command: Runnable) { diskIO.execute(command) }
}

建立数据类

@Entity(tableName = "persontable")
data class PersonBean @JvmOverloads constructor(
        /**
         * 姓名
         */
        @ColumnInfo(name = "name") var name: String,
        /**
         * 性别
         */
        @ColumnInfo(name = "sex") var sex: Int,
        /**
         * 年龄
         */
        @ColumnInfo(name = "age") var age: Int
) {
    /**
     * 主键
     */
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    var id: Int? = null
    /**
     * 描述
     */
    @ColumnInfo(name = "description")
    var description: String? = ""
}

这里包括了表名,不能为空的字段可以放在数据类的构造函数中,主键和其他可以为空的字段放在外面。

原文地址:https://www.cnblogs.com/xl-phoenix/p/9503688.html