废话也不多说了,Room数据库就是对SQLite数据库的封装,使之用起来更方便。Google也说了强烈推荐使用Room来替代SQLite。
1.在项目中添加Room
dependencies {
...
def room_version = "2.1.0-alpha02"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
}
由于使用了Kotlin注解,请确保Gradle里配置了kotlin-kapt插件
apply plugin: 'kotlin-kapt'
2. 简单使用
Room数据库主要由三个部分组成:
Entity
: 数据实体,一个Entity代表一张数据表DAO
: 在这里定义数据表的操作方法Database
: 数据库
下面详细来讲如何实现这三个部分。
2.1 定义数据表Entity
@Entity(tableName = "user")
data class UserEntity(@PrimaryKey @ColumnInfo(name = "uid") var uid: Int,
@ColumnInfo(name = "first_name") var firstName: String?,
@ColumnInfo(name = "last_name") var lastName: String?)
要点1:在类上方添加@Entitiy
注解,并定义数据表名称
要点2:通过@PrimaryKey
来定义主键,@ColumnInfo
来定义列名称,也可以不添加注解@ColumnInfo
,那么列名称就默认是属性的名称。
这样就相当于定义了一张表user
,user表包含uid
,first_name
, last_name
三个字段。其中uid
为主键,数据类型为Int
, first_name
和last_name
数据类型为String
,且可以为空。
2.2 定义数据表操作方法
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<UserEntity>
@Query("SELECT * FROM user WHERE uid = (:userId)")
fun findById(userId: Int): UserEntity
@Insert
fun insertAll(vararg userEntities: UserEntity)
@Delete
fun delete(vararg user: UserEntity)
@Update
fun update(vararg user: UserEntity)
}
可