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操作SQLite数据库让其变得无比高效和简洁(教程一)的主要内容,如果未能解决你的问题,请参考以下文章
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
Android 使用Room操作SQLite数据库让其变得无比高效和简洁(教程一)
Android第十一讲笔记(SqLite数据库,Room框架)