Architecture -- Room
发布日期:2021-09-06 21:40:24 浏览次数:4 分类:技术文章

本文共 3132 字,大约阅读时间需要 10 分钟。

1). 简介

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

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

2). 依赖
buildscript {  ext.room_version = "1.1.0"}dependencies {  // Room 使用  implementation "android.arch.persistence.room:runtime:$room_version"  annotationProcessor "android.arch.persistence.room:compiler:$room_version"  // optional - RxJava support for Room  implementation "android.arch.persistence.room:rxjava2:$room_version"  // optional - Guava support for Room, including Optional and ListenableFuture  implementation "android.arch.persistence.room:guava:$room_version"  // Test helpers  testImplementation "android.arch.persistence.room:testing:$room_version"  // Kotlin  kapt "android.arch.persistence.room:compiler:$room_version"}
3). 数据实体类
* 实体类 * Created by mazaiting on 2018/7/25. */@Entitydata class User(       @PrimaryKey        val uid: Int,       @ColumnInfo(name = "first_name")       var firstName: String,       @ColumnInfo(name = "last_name")       var lastName: String)
4). 用户DAO类
/** * 用户DAO类 * Created by mazaiting on 2018/7/25. */@Daointerface UserDao {  @Query("SELECT * FROM user")  fun getAll(): List
@Query("SELECT * FROM user WHERE uid IN (:userIds)") fun loadAllByIds(userIds: IntArray): List
@Query("SELECT * FROM user WHERE first_name LIKE :first AND last_name LIKE :last LIMIT 1") fun findByName(first: String, last: String): User @Insert fun insertAll(users: List
) // 可变参数// fun insertAll(vararg users: User) @Delete fun delete(user: User) @Update fun update(user: User)}
5). 数据库类
/** * 数据库类 * Created by mazaiting on 2018/7/25. */@Database(entities = arrayOf(User::class), version = 1)abstract class AppDatabase : RoomDatabase() {  // 获取DAO  abstract fun userDao(): UserDao}
6). 创建数据库
btn_create_db.setOnClickListener {      val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "TEST").build()      userDao = db.userDao()    }
7). 新增数据

对数据的操作必须在子线程中

btn_insert.setOnClickListener {      Thread(Runnable {        val users = (0..10).map { User(it, "first$it", "last$it") }        userDao.insertAll(users)      }).start()    }
8). 查询数据
btn_find_all.setOnClickListener {      Thread(Runnable {        userDao.getAll().forEach { L.e(it.toString()) }      }).start()    }    btn_find_id.setOnClickListener {      Thread(Runnable {        userDao.loadAllByIds(intArrayOf(0, 1, 2, 3, 4)).forEach { L.e(it.toString()) }      }).start()    }    btn_find_name.setOnClickListener {      Thread(Runnable {        L.e(userDao.findByName("first1", "last1").toString())      }).start()    }
9). 更新数据
btn_update.setOnClickListener {      Thread(Runnable {        val user = userDao.findByName("first1", "last1")        user.firstName = "ma"        user.lastName = "zaiting"        userDao.update(user)        userDao.loadAllByIds(intArrayOf(1)).forEach { L.e(it.toString()) }      }).start()    }
10). 删除数据
btn_delete.setOnClickListener {      Thread(Runnable {        userDao.delete(userDao.loadAllByIds(intArrayOf(0))[0])      }).start()    }
11).
12).

转载地址:https://blog.csdn.net/weixin_34273479/article/details/89587246 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Kaggle如何取得top 2%,这篇文章告诉你!
下一篇:观察者模式(Observer )

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月15日 00时42分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

我在爬坡阶段 2019-04-26
大疆机甲大师教育机器人Python开发:中文命名变量初尝试 2019-04-26
大疆机甲大师教育机器人Python开发:API中文化初尝试 2019-04-26
大疆机甲大师Python开发: 两只老虎 2019-04-26
大疆机甲大师教育机器人Python API中文化之一:枪亮枪暗 2019-04-26
大疆机甲大师教育机器人Python API中文化之二:LED闪烁 2019-04-26
大疆 RoboMaster 机甲大师官方刚刚开通”机甲小 S 实验室”知乎专栏 2019-04-26
大疆机甲大师教育机器人Python API中文化之三:底盘灯效 2019-04-26
大疆机甲大师教育机器人Python API中文化之四五:云台灯效,指定序号 2019-04-26
大疆机甲大师教育机器人Python API中文化之六:关灯 2019-04-26
“中文编程”知乎专栏两岁了——山雨欲来风满楼 2019-04-26
大疆机甲大师Python API之七:做个闹钟 2019-04-26
【意外走向】大疆机甲大师Python API之八:计时——为性能测试展开1000次循环 2019-04-26
RFC#2457——Rust 语言支持非 ASCII 码标识符在 GitHub 引发的激辩(一) 2019-04-26
RFC#2457——Rust 语言选择支持非 ASCII 码标识符在 GitHub 引发的激辩(二) 2019-04-26
”为什么有这么多人执着于中文编程?”回答两千赞留念及回应 2019-04-26
【家务】盘点小孩玩具零件缺失情况 2019-04-26
开发中文 API 的一些策略 2019-04-26
从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一) 2019-04-26
中文命名标识符如何区分类型和变量 2019-04-26