一、前言
视图是一个或者多个基本表(视图)构建的一个虚拟表,使用视图有许多的好处,其中主要的两个好处是封装查询和灵活的安全性控制。Room 从2.1.0 及更高版本开始支持 SQLite 数据库视图功能,你可以将查询封装到一个类中, Room 将这些支持查询的类称之为视图,视图在 DAO 中使用跟普通的数据实体对象一样。更多关于视图的相关内容大家可以自行学习,在本篇幅,我们将详细介绍在 Room 中创建视图并使用。
注意事项:跟数据实体类一样,你可以在视图中执行
SELECT查询语句,但是你无法在视图中执行INSERT、UPDATE、DELETE语句。换句话说,视图只有读权限,没有写权限,这就是安全性控制的一个特点。
二、 在Room中使用视图
2.1 创建视图类
Room 创建视图非常简单,定义一个数据类(跟数据实体类一样,不过对应的是视图,不是实体表),使用 @DatabaseView 注解进行标注,@DatabaseView 有两个参数,一个是 viewName (自定义视图名称,可选),另一个是 values(视图数据对应的 SQL 查询语句)。如下示例所示:
// 数据实体类(实体表),视图类对应数据实体类(实体表)
@Entity(tableName = "schools")
data class School(@PrimaryKey val sid: Int, val name: String, val addr: String)
@Entity(tableName = "students")
data class Student(@PrimaryKey val sid: Int, val name: String, val age: Int, val schoolId: Int, val addr: String?)
// 创建视图类,@DatabaseView 注解可以用 viewName 参数指定视图名称,如果不指定视图名称,@DatabaseView 注解默认参数是 value
//@DatabaseView(viewName = "student_school", value = "SELECT students.sid, students.name, students

本文介绍如何在Android Room中使用SQLite视图,包括创建视图、查询数据和数据库迁移时的处理方法。
最低0.47元/天 解锁文章
732

被折叠的 条评论
为什么被折叠?



