文章插图
ndroid 数据库Room的开发使用详解一.简介:
Room 在SQLite上提供了一个抽象层,以便在充分利用SQLite的强大功能的同时,能够流畅地访问数据库 。
Room包含3个主要组件:
数据库:包含数据库持有者,并作为应用已保留持久性关系型数据的底层连接的主要接入点 。
@Database注释
1.是扩展RoomDatabase的抽象类 。
2.在注释中添加与数据库关联的实体表 。
3.包含具有0个参数且返回使用@Dao 注释的类的抽象方法 。
在运行时,您可以通过调用Room.databaseBuilder()或Room.inMemoryDatabaseBuilder()获取Database的实例 。
@Entity:表示数据库中的表
@Dao:包含用于访问数据库的方法
二:依赖Room数据库
1.在App模块下bulid.Gradle 添加项目的依赖
//添加Room依赖implementation 'androidx.room:room-runtime:2.2.5'annotationProcessor 'androidx.room:room-compiler:2.2.5'三:创建一个实体类Entity
@Entitypublic class User {@PrimaryKey(autoGenerate = true)//主键是否自动增长,默认为false private int id; private String name; private int age; public int getId() {return id; }public void setId(int id) {this.id = id; }public String getName() {return name; }public void setName(String name) {this.name = name; }public int getAge() {return age; }public void setAge(int age) {this.age = age; }}1.主键:每一个实体必须定义至少一个字段作为主键 。
1.可以在实体中@PrimaryKey(autoGenerate = true)注解,同时你也可以使用autoGenerate属性,可以通过Room来自动分配ID 2.也可以通过@Entity@Entity(primaryKeys = {"id","name"})如果有组合主键2.通常Room会使用类名作为数据库的表名,如果你希望自定义表名在@Entity(tableName = “my_user”),注意: SQLite中,表名是不区分大小写的
3.Room用变量名称作为数据库表的字段名称,如果你希望字段名称和变量名称不一样,在变量出添加
public class User { @ColumnInfo(name = "first_name")private String name;}4.索引和唯一性
根据你操作数据的方式你可能需要通过索引来提高查询数据库的速度,通过@Entity添加indices属性,有些字段设置唯一性,可以通过@Index注解下设置unique为true
@Entity(indices = {@Index(value = "https://www.520longzhigu.com/diannao/name",unique = true)})public class User {private String name;}5.定义对象之间的关系
由于SQLite是关系型数据库,你可以指定对象之前的关系,Room是明确禁止直接使用关系,但Room仍然允许你在实体之间定义外键 。
例如:如果有另一个实体叫做Book,你可以在User实体下使用@ForeignKey注解定义他们之间的关系 。
@Entity(foreignKeys = @ForeignKey(entity = User.class, parentColumns = "id",childColumns = "user_id")//定义外键)public class Book {@PrimaryKey//定义主键 public int bookId; public String title; @ColumnInfo(name = "user_id")//定义数据库表中的字段名public int userId; public int getUserId() {return userId; }public void setUserId(int userId) {this.userId = userId; }public int getBookId() {return bookId; }public void setBookId(int bookId) {this.bookId = bookId; }public String getTitle() {return title; }public void setTitle(String title) {this.title = title; }}6.创建嵌套对象
你可以使用@Embedded批注来表示要分解到表中子字段的对象
例如:我们的User类可以包含Address类型的字段,它表示名为street,city,state和postCode的字段的组合 。要将组合列分别存储在表中,请在User类中包含使用@Embedded注释的Address字段
public class Address {public String street;public String state;public String city;@ColumnInfo(name = "post_code")public int postCode;}@Entitypublic class User {@PrimaryKeypublic int id;public String firstName;@Embeddedpublic Address address;}故这个表示User对象的表包含具有以下名称的列:id,firstName,street,state,city和post_code 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 细数男人增肌的健身误区
- 户外也能增肌的简单动作
- 健身最简单高效的瑜伽动作
- 目前最好用的cad版本 cad如何安装插件的命令
- 自制拍网的制作视频 个人视频网站应该怎么做
- 创建分区的操作步骤 win10笔记本分区步骤
- 免费的h5制作网站 h5表单制作教程
- 推荐口碑最好的充电宝 2021年充电宝排行榜
- 有没有不用互联网就可以拍照和搜题的方法? 拍照搜题在线使用一下
- 消防烟感探测器的作用