Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)

Posted 路宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)相关的知识,希望对你有一定的参考价值。

前言:首先添加依赖和创建布局页面实现添加,更新,删除,清空这四个按钮,之后再去实现相应的功能。

一、首先在build.gradle里面添加相关的依赖

	def room_version = "2.3.0"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"
    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:2.4.0-beta01"

二、布局页面activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_insert"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="添加" />

            <Button
                android:id="@+id/btn_update"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="50dp"
                android:text="更新" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_clear"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="清空" />

            <Button
                android:id="@+id/btn_delete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="50dp"
                android:text="删除" />
        </LinearLayout>

    </LinearLayout>

</LinearLayout>

三、创建实体类Word,具体注释都已给出

@Entity
public class Word {
    //标注为主键 并且自动生成
    @PrimaryKey(autoGenerate = true)
    public int id;
    //ColumnInfo标注列的名称 如果不标注则以变量名 为列名
    @ColumnInfo(name="english_word")
    public String word;
    @ColumnInfo(name = "chinese_meaning")
    public String chineseMeaning;

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

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

    public int getId() {
        return 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;
    }
}

四、创建一个访问数据库操作的接口WordDao,具体的增删改查功能,都要在这个接口里面声明

//访问数据库操作的接口
@Dao  //Database access Object
public interface WordDao {
    //添加数据
    @Insert
    void insertWords(Word...words);
    @Delete
    //根据条件删除数据
    void deleteWords(Word...words);
    //删除所有数据
    @Query("DELETE FROM WORD")
    void deleteAllWords();
    //更新数据
    @Update
    void updateWords(Word...words);
    //查询返回所有数据
    @Query("SELECT * FROM WORD ORDER BY ID DESC")
    List<Word> getAllWords();
}

五、创建一个抽象类WordDataBase,如果有多个entities,则应该写多个Dao

// 参数1:实体类  参数2:数据库版本号 参数3:禁止将数据库架构导入到给定的文件夹中
@Database(entities = {Word.class},version = 1,exportSchema = false)
public abstract class WordDataBase extends RoomDatabase {
    public abstract WordDao getWordDao();
}

六、所有准备工作完成后,在Activity文件中,进行相应功能的实现:

public class MainActivity extends AppCompatActivity {
    private WordDataBase wordDataBase;
    private WordDao wordDao;
    private Button btn_insert, btn_clear, btn_update, btn_delete;
    private TextView tv_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wordDataBase = Room.databaseBuilder(this, WordDataBase.class, "word_database")
                .allowMainThreadQueries()
                .build();
        wordDao = wordDataBase.getWordDao();
        btn_insert = findViewById(R.id.btn_insert);
        btn_clear = findViewById(R.id.btn_clear);
        btn_update = findViewById(R.id.btn_update);
        btn_delete = findViewById(R.id.btn_delete);
        tv_text = findViewById(R.id.tv_text);
        updateView();
        btn_insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Word word1 = new Word("Hello", "你好!");
                Word word2 = new Word("World", "世界!");
                wordDao.insertWords(word1, word2);
                updateView();
            }
        });
        btn_clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                wordDao.deleteAllWords();
                updateView();
            }
        });
        btn_update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Word word = new Word("Hi", "你好啊");
                word.setId(10);
                wordDao.updateWords(word);
                updateView();
            }
        });
        btn_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Word word = new Word("Hi", "你好啊");
                word.setId(10);
                wordDao.deleteWords(word);
                updateView();
            }
        });

    }

    private void updateView() {
        List<Word> list = wordDao.getAllWords();
        String text = "";
        for (int i = 0; i < list.size(); i++) {
            Word word = list.get(i);
            text += word.getId() + ":" + word.getWord() + "=" + word.getChineseMeaning() + "\\n";
        }
        tv_text.setText(text);
    }

}

效果图:

这只是一个简单的实现效果,后续会陆续完善~
相关文章持续更新中

Android 使用Room操作SQLite数据库让其变得无比高效和简洁(完善)

Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)

Android 使用Room操作数据库进行数据库版本的升级和迁移

以上是关于Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)的主要内容,如果未能解决你的问题,请参考以下文章

Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)

Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)

Android第十一讲笔记(SqLite数据库,Room框架)

android Room数据库框架 怎么自定义 sqlite db文件路径

Room----Android数据库(SQLite)

从 SQLite 迁移到 Android Room Persistence Library