【白水日记】Room database

2021-02-19  本文已影响0人  d2665f7588cb

    Room是Jetpack中的一个组件,处理和配置数据库的琐事,内部实现还是SQLite

数据通常使用数据类表示,使用函数get set修改访问,但在数据库中,需要使用实体和查询来操作

实体表示数据存储在数据库的对象,一个实体类对应一个表,每个实例对应表中的一行,每个属性对应表的一列

查询表示数据库中表或组合信息的请求,对执行的操作,常用的查询有增删改

room已经做了kotlin数据类存储到sqlite数据表中的实体的过程,同时实现了函数声明到sql查询的复杂工作

使用时,必须将每个实体定义为带注释的数据类,交互接口同样需要带上注释,也即dao对象,room使用这些对象进行创建表,操作查询

   定义一个数据类,在类名上注释

@Entity(tableName = "xxxxxx")

tableName可以不写,默认就是类名

定义一个主键,在属性上添加注释

@PrimaryKey(autoGenerate = true)

定义其他属性,在属性上添加如下注释

@ColumnInfo(name = "xxxxxx")

这样,数据dao就定义好了

---------------------------------------------------------------------------      关于操作,常用的就是@Insert,@Delete,@Update 

    进行相关操作,需要创建一个接口,用@Dao注释,接口主体内,新增一个insert()方法,上面使用@insert()注释,内部使用数据库实体类作为参数

update方法类似,query没有提供更详细的注释,需要在@Query之后写上详细的查询语句

@Query("SELECT * from xxx WHERE Id = :key")

方法的参数可以作为查询条件变量,只需要在前面加一个":"即可

@Delete方法表示删除一个条,但是对于清除表中所有的条目来说效率不高,如果只是清除数据,可以使用@Query()中执行DELETE语句进行删除

---------------------------------------------------------------------------

创建数据库,创建一个数据库,需要在类上面用@Database注释,数据库一般都是单例的,在getInstance方法中创建一个实例,如果库不存在,需要生成一个数据库,

@Database的参数中,使用entities表示实体类,version表示版本号

    database对象可以定义一个companion对象,允许不实例的情况下进行访问创建或获取,在kotlin中可以通过@Volatile注释设置INSTANCE对象

上一篇下一篇

猜你喜欢

热点阅读