前言:首先添加依赖和创建布局页面实现添加,更新,删除,清空这四个按钮,之后再去实现相应的功能。
一、首先在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); } }
效果图:
这只是一个简单的实现效果,后续会陆续完善~