在 Room 数据库中创建视图

本文介绍如何在Android Room中使用SQLite视图,包括创建视图、查询数据和数据库迁移时的处理方法。

一、前言

    视图是一个或者多个基本表(视图)构建的一个虚拟表,使用视图有许多的好处,其中主要的两个好处是封装查询和灵活的安全性控制。Room 从2.1.0 及更高版本开始支持 SQLite 数据库视图功能,你可以将查询封装到一个类中, Room 将这些支持查询的类称之为视图,视图在 DAO 中使用跟普通的数据实体对象一样。更多关于视图的相关内容大家可以自行学习,在本篇幅,我们将详细介绍在 Room 中创建视图并使用。

注意事项:跟数据实体类一样,你可以在视图中执行 SELECT 查询语句,但是你无法在视图中执行 INSERTUPDATEDELETE 语句。换句话说,视图只有读权限,没有写权限,这就是安全性控制的一个特点。

二、 在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值