Android Room数据库简单使用
前言
最近一个项目因为大部分时间是离线使用,只在联网时提交和更新数据,所以需要用到本地数据库!之前一直用的是realm数据库,相对来说也是不错的,读写的性能还是还能很强悍的!但是最近项目完全使用了kotlin框架,而正好谷歌官方的room数据库也是使用kotlin,所以就记录下使用过程!
引入依赖
1 | dependencies { |
简单示例
首先定义一个user实体,每个实例都代表数据库中的一行
1
2
3
4
5
6
data class User(
val uid: Int,
val firstName: String?,
val lastName: String?
)定义DAO(数据访问对象)
- 以下代码定义了一个名为
UserDao
的 DAO。UserDao
提供了应用的其余部分用于与user
表中的数据交互的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface UserDao {
fun getAll(): List<User>
fun loadAllByIds(userIds: IntArray): List<User>
fun findByName(first: String, last: String): User
fun insertAll(vararg users: User)
fun delete(user: User)
}- 以下代码定义了一个名为
定义数据库
- 该类必须带有
@Database
注解,该注解包含列出所有与数据库关联的数据实体的entities
数组。 - 该类必须是一个抽象类,用于扩展
RoomDatabase
。 - 对于与数据库关联的每个 DAO 类,数据库类必须定义一个具有零参数的抽象方法,并返回 DAO 类的实例。
- 该类必须带有
```kotlin
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
//在单个进程中运行,在实例化 AppDatabase 对象时应遵循单例设计模式1
2
3
4
5
6
7
8
- 用法
```kotlin
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).build()然后,您可以使用
AppDatabase
中的抽象方法获取 DAO 的实例,转而可以使用 DAO 实例中的方法与数据库进行交互1
2val userDao = db.userDao()
val users: List<User> = userDao.getAll()