Room 让数据库变得无比高效简洁 1.一个简单的小例子

 

 导入依赖

def room_version = "2.2.0"

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation 'android.arch.lifecycle:extensions:1.1.1'


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

 

写实体类 WordEntity

package com.example.roombasic;

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

@Entity
public class WordEntity {

    //(autoGenerate = true) 自动生成数据
    @PrimaryKey(autoGenerate = true)
    private int id;

    //ColumnInfo注释
    @ColumnInfo(name = "english_word")
    private String word;
    @ColumnInfo(name = "chinese_meaning")
    private String chineseMeaning;

    public WordEntity(String word, String chineseMeaning) {
        this.word = word;
        this.chineseMeaning = chineseMeaning;
    }

    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 getChineseMeaning() {
        return chineseMeaning;
    }

    public void setChineseMeaning(String chineseMeaning) {
        this.chineseMeaning = chineseMeaning;
    }

    @Override
    public String toString() {
        return "WordEntity{" +
                "id=" + id +
                ", word='" + word + '\'' +
                ", chineseMeaning='" + chineseMeaning + '\'' +
                '}';
    }
}

写dao层接口 WordDao

 

package com.example.myroombasic;

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 insertWords(WordEntity...WordEntity);

    @Update
    void updateWord(WordEntity...WordEntity);

    @Delete
    void deleteWords(WordEntity...WordEntity);

    //删除全部  数据库名写实体类名就行了
    @Query("delete from wordentity")
    void deleteAllWords();

    //查询全部 数据库名写实体类名就行了
    @Query("select * from WordEntity order by id desc")
    List<WordEntity> getAllWords();
}

 

写数据库创建类,并获取dao层接口     WordDataBase

package com.example.roombasic;

import androidx.room.Database;
import androidx.room.RoomDatabase;

//现在数据库就一个实体所以写一个就行了,这玩意能写多个,现在版本自定义为1 注意是花括号
@Database(entities = {WordEntity.class},version = 1,exportSchema = false)
public abstract class WordDataBase extends RoomDatabase {
    public abstract WordDao getWordDao();
}

main

 

package com.example.myroombasic;

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    WordDataBase wordDataBase;
    WordDao wordDao;
    TextView textView66;
    String text;

    Button buttonInsert,buttonDelete,buttonClear,buttonUpdate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //各个组件的初始化
        textView66 = findViewById(R.id.text66);
        buttonInsert = findViewById(R.id.buttonInsert);
        buttonClear = findViewById(R.id.buttonClear);
        buttonUpdate = findViewById(R.id.buttonUpdate);
        buttonDelete = findViewById(R.id.buttonDelete);

        //创建数据库
        // allowMainThreadQueries强迫在主线程运行
        //正常来说是不允许在主线程中运行的
        wordDataBase = Room.databaseBuilder(this,WordDataBase.class,"fuck")
                .allowMainThreadQueries()
                .build();

        wordDao = wordDataBase.getWordDao();

        //显示数据库的内容
        updateView();

        //插入按钮
        buttonInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WordEntity wordEntity = new WordEntity("hello", "你好");
                WordEntity wordEntity1 = new WordEntity("world", "世界");
                wordDao.insertWords(wordEntity,wordEntity1);
                updateView();
            }
        });

        //清空按钮
        buttonClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                wordDao.deleteAllWords();
                updateView();
            }
        });

        //更新按钮
        buttonUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WordEntity wordEntity = new WordEntity("更改id为64的", "更改id为64的");
                wordEntity.setId(64);
                wordDao.updateWord(wordEntity);
                updateView();
            }
        });

        //删除按钮
        buttonDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                wordDao.deleteWords();
            }
        });


    }

    //更新视图
    void updateView(){
        text = "";
        List<WordEntity> allWords = wordDao.getAllWords();
        for (WordEntity allWord : allWords) {
            text += allWord.toString() + "  ";
        }
        textView66.setText(text);
    }
}

 

 

 

写一个ScrollView 把text放到这里,如果text过长的话还能滚动

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/buttonDelete"
        android:layout_width="219dp"
        android:layout_height="59dp"
        android:layout_marginBottom="36dp"
        android:text="delete"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.181"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/buttonClear"
        android:layout_width="219dp"
        android:layout_height="59dp"
        android:layout_marginBottom="144dp"
        android:text="clear"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.118"
        app:layout_constraintStart_toStartOf="parent" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="754dp" />

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="546dp"
        android:layout_height="748dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0">

        <TextView
            android:id="@+id/text66"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </ScrollView>

    <Button
        android:id="@+id/buttonInsert"
        android:layout_width="198dp"
        android:layout_height="47dp"
        android:layout_marginBottom="244dp"
        android:text="insert"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.17"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/buttonUpdate"
        android:layout_width="145dp"
        android:layout_height="89dp"
        android:layout_marginBottom="200dp"
        android:text="update"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.923"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

posted @ 2021-10-07 23:32  涂妖教  阅读(244)  评论(0)    收藏  举报