安卓学习02---room

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的映射,第三个参数为数据库名称。

原文地址:https://www.cnblogs.com/wuren-best/p/12253217.html

时间: 2024-10-30 02:57:34

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

安卓学习-界面-布局-RelativeLayout

RelativeLayout相对布局,所有内部的组件都是相对的 XML属性 XML属性 函数 说明 android:gravity setGravity 内部组件的对其方式 android:ignoreGravity setIgnoreGravity 设置哪个组件不受Gravity影响 RelativeLayout.LayoutParams用来设置内部组件的对齐方式 XML属性 说明 android:layout_centerHorizontal 水平居中 android:layout_cent

安卓学习第13课——BaseAdapter

BaseAdapter创建这么一个对象,需要些四个方法. int getCount(); Object getItem(int position); long getItemId(int position);View getView(int position, View convertView, ViewGroup parent);(1)列表中的项数(2)返回值的列表内容(3)获得postion处的列表项的ID(4)该列表项里的组件 package com.example.baseadapter

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

ThinkPhp学习02

原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.class.php)二.ThinkPHP的MVC特点        三.ThinkPHP的MVC对应的目录    M 项目目录/应用目录/Lib/Model V 项目目录/应用目录/Tpl C 项目目录/应用目录/Lib/Action四.url访问C     

安卓学习第12课——SimpleAdapter

SimpleAdapter一点也不简单,他的参数就带了5个,天哪,晕了.. 今天学的这个适配器, public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 看这个大概明白,参数分别是第一个:表示访问整个android应用程序接口,基本上所有的组件都需要,一般都写this(改天研究一下),第二个应该是这个List对象

安卓学习第9课——计时器chronometer

今天学习了钟表及计时器.. 我觉得AnalogClock和DigitalClock直接使用就可以.唯一需要知道的就是AnalogClock是可以修改表盘和分针时针的. 方法是android:dail及android:hand_minute和hand_hour. 下面介绍的是计时器的用法. 首先xml中只要放入一个chronometer和一个按钮即可.为的是是点击启动按钮,开始计时,20s停止. package com.example.chronometer; import android.app

安卓学习随笔 -- 自定义标题栏

在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fi

Android开发手册 安卓学习教程手册(MtAndroid开发手册)

发布本资料须遵守开放出版许可协议 1.0 或者更新版本. 未经版权所有者明确授权,禁止发行本文档及其被实质上修改的版本. 未经版权所有者事先授权,禁止将此作品及其衍生作品以标准(纸质)书籍形式发行. 如果有兴趣再发行或再版本手册的全部或部分内容,不论修改过与否,或者有任何问题,请联系版权所有者 [email protected]. Android开发者必备学习手册,基础和进阶手册. (MtAndroid开发手册) Android开发手册 安卓学习教程手册(MtAndroid开发手册),布布扣,b

安卓学习第11课——AutoCompleteTextView

...在百度上搜了这么一段.理解了ArrayAdapter的三个参数的用途 1. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是String类型的,数据的数据类型还可以是其他的包括对象类型的 2. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ArrayListDemo.this, android.R.layout.simple_list_item

安卓学习第10课——listview

1.普通listview <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" androi