title: 安卓学习02---room
date: 2020-02-02 18:20:13
tags:

room是jetpack的组件,可以使程序流畅的访问sqlite。

<!--more -->

1、依赖的添加

dependencies {
def room_version = "2.2.2"

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

// Test helpers
testImplementation "androidx.room:room-testing:$room_version"
}

2、room的使用

1、Entity(表结构)

相当于java web中的实体类。以单词为例,Entity应为:

package com.example.roombasic;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class Word {
@PrimaryKey(autoGenerate = true)
private int id;

@ColumnInfo(name = "english_word")
private String word;

@ColumnInfo(name = "chinese_mean")
private String chineseMean;

public Word(String word, String chineseMean) {
this.word = word;
this.chineseMean = chineseMean;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getWord() {
return word;
}

public void setWord(String word) {
this.word = word;
}

public String getChineseMean() {
return chineseMean;
}

public void setChineseMean(String chineseMean) {
this.chineseMean = chineseMean;
}
}

  • 必须在类前使用注解 @Entity 来声明。

  • 表结构中必须有一个主键,主键的声明为 @PrimaryKey ,而主键递增则在其后添加 (autoGenerate = true)。

  • 列名的注解使用 @ColumnInfo ,可以定义表结构中的列名,如 (name = "english_word") 。

2、dao

dao是一个接口,只需要写接口即可。

package com.example.roombasic;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface WordDao {

@Insert
void addWords(Word... words);

@Update
void updateWords(Word... words);

@Delete
void deleteWords(Word... words);

@Query("delete from word")
void deleteAllWords();

@Query("select * from word order by id desc")
// List<Word> getAllWords();
LiveData<List<Word>> getAllWordsLive();
}


  • 同样需要使用注解来声明 @Dao 。

  • 每种接口需要使用注解来声明,如@Insert、@Update、@Delete。

  • @Query("select * from word order by id desc") 是查询语句。

  • 接口暂时不需要自己来实现,room已经帮我们写出了具体的代码。

  • Word... words 表明可以传进多个参数。类名... 对象名s 代表可以传递多个参数。

3、database

database来获得dao

package com.example.roombasic;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
@Database(entities = {Word.class},version = 1,exportSchema = false)
public abstract class WordDatabase extends RoomDatabase {
private static WordDatabase INSTANCE;
static synchronized WordDatabase getDatabase(Context context){
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word_database")
.build();
}
return INSTANCE;
}

public abstract WordDao getWordDao();
}

  • 需要使用注解来声明 @Database(entities = {Word.class},version = 1,exportSchema = false)

    • entities = {Word.class}的{}中来填写entity,可添加多个。

    • version 是当前数据库版本。

    • exportSchema 暂时不知道干什么用,需要写上。

  • synchronized为java中的锁机制,多线程防止出错。

  • Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word_database").build

    • 第一个参数是activity,第二个参数为database的映射,第三个参数为数据库名称。

安卓学习02---room的更多相关文章

  1. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  2. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  3. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  4. Android Testing学习02 HelloTesting 项目建立与执行

    Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...

  5. Java学习02

    Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import    java.util.Scanner; 二.在类中 Scanner input=new     Sanner(Sy ...

  6. ThinkPhp学习02

    原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controll ...

  7. JVM学习02:GC垃圾回收和内存分配

    JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...

  8. 2018.12.22 Spring学习02

    Spring学习02 1.使用注解配置Spring 1.1 为主配置文件引入新的命名空间(约束) 添加约束文件xxx-xxx-context.xml 添加到主配置文件中 选择刚才的context.xm ...

  9. 天脉2(ACoreOS653)操作系统学习02

    天脉2(ACoreOS653)操作系统学习02 一.分区内通信方法 分区内通信指同一分区内进程之间的通信.ARINC 653定义的分区内进程通信机制,包括:缓存队列(Buffers-Queue).黑板 ...

随机推荐

  1. 你真的会用PostGIS中的buffer缓冲吗?

    buffer - 图形缓冲区分析,GIS中最基本的空间分析之一. 实现buffer的工具有很多种,例如前端的truf.js.服务端的ArcGISserver.桌面端的ArcMap.数据库端的PosrG ...

  2. 找回了当年一篇V4L2 linux 摄像头驱动的博客

    从csdn找回 , 无缘无故被封了..当时损失不少啊!!!!!!!!! linux 摄像头驱动 :核心数据结构:    /**     * struct fimc_dev - abstraction ...

  3. JAVA内存模型和Happens-Before规则

    前言 上一篇文章王子给大家介绍了并发编程中比较关心的三个核心问题,可见性.有序性和原子性. 今天我们继续来探索并发编程的内容,聊一聊JAVA的内存模型和Happens-Before规则. JAVA内存 ...

  4. spring中的事务有两种方式

    1种是我们常用的声明式事务,如注解,或者配置文件配置的. 2种是编程式事务,如 TransactionTemplate 类的使用.

  5. Python_入门第一篇【持续更新...】

    1.准备 准备电脑 和 分区 1.准备配置稍高的电脑(后后期需要装虚拟机),分辨率1920*1080 2.分区: C→系统 D→Project E→软件安装盘 F→其他 准备编辑器 1.Sublime ...

  6. web安全原理-文件包含漏洞

    前言 起来吃完早饭就开始刷攻防世界的题,一个简单的文件包含题我竟然都做不出来我服了  拿出买的书开始从头学习总结文件包含漏洞! 一.文件包含漏洞 文件包含漏洞 文件包含函数的参数没有经过过滤或者严格的 ...

  7. RSA(攻防世界)Rsa256 -- cr4-poor-rsa

    RSA256 [攻防世界] 题目链接 [RSA256] 下载附件得到两个文件. 猜测第一个 txt 文件 可能为RSA加密密文 ,第二个估计就是密钥.依次打开看看: 果然如此. 目标: 寻找 n.e. ...

  8. 在Guitar Pro中如何调节拍

    编辑一首曲子的时候,曲子的节奏往往是很重要的,那节奏一般是怎样设置的呢,在{cms_selflink page='index' text='Guitar Pro'}中,一般是通过调节节拍来完成的,很多 ...

  9. 在FL Studio中通过Key Tracking来改善声音

    FL Studio中的关键点跟踪(Key Tracking),是一种为MIDI添加更多动态效果的便利工具,在FL Studio中通过使用这个插件能力,我们无需担心自动化或手动调整参数等比较麻烦的问题. ...

  10. Vuex form表单处理, 比官网更好的办法

    Vuex form表单处理, 比官网更好的办法 问题, 当使用vuex的state作为表单的v-model元素, 虽然简单粗暴, 但这种修改没有经过mutation方法. 在严格模式下会抛出错误 目录 ...