Room
添加依赖
def room_version = "2.3.0"
implementation "androidx.room:room-runtime:$room_version" //Room的API的支持
annotationProcessor "androidx.room:room-compiler:$room_version" //Room注解处理器
添加表
@Entity
public class Student {
@PrimaryKey(autoGenerate = true)
private int mId;
private String mName;
private int mAge;
public Student() {
}
public Student(int id, String name, int age) {
mId = id;
mName = name;
mAge = age;
}
public int getId() {
return mId;
}
public void setId(int id) {
mId = id;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public int getAge() {
return mAge;
}
public void setAge(int age) {
mAge = age;
}
@Override
public String toString() {
return "Student{" +
"mId=" + mId +
", mName='" + mName + '\'' +
", mAge=" + mAge +
'}';
}
}
添加Dao
@Dao
public interface StudentDao {
@Query("select * from Student")
List<Student> queryStudentList();
@Query("select * from Student where mId = :id")
Student queryStudent(int id);
@Insert
void insertStudents(Student ... students);
@Insert
void insertStudent(Student student);
@Delete
void deleteStudent(Student ... students);
@Query("Delete from Student")
void deleteAllStudents();
@Update
void updateStudent(Student student);
@Update
void updateStudents(Student ... students);
}
添加Database
@Database(entities = {Student.class}, version = 1,
exportSchema = false)
public abstract class MyRoomDatabase extends androidx.room.RoomDatabase {
public static MyRoomDatabase mMyRoomDatabase;
public abstract StudentDao getStudentDao();
public MyRoomDatabase() {
}
public static MyRoomDatabase getInstance(Context context) {
if (mMyRoomDatabase == null) {
synchronized (MyRoomDatabase.class) {
if (mMyRoomDatabase == null) {
mMyRoomDatabase = Room
.databaseBuilder(context.getApplicationContext(),
MyRoomDatabase.class,
"first_database")
.build();
}
}
}
return mMyRoomDatabase;
}
}
添加处理引擎
public class DBEngine {
private static final String TAG = "DBEngine";
private StudentDao mStudentDao;
public DBEngine(Context context) {
MyRoomDatabase myRoomDatabase = MyRoomDatabase.getInstance(context);
mStudentDao = myRoomDatabase.getStudentDao();
}
public void insertStudents(Student... students) {
new InsertAsyncTask(mStudentDao).execute(students);
}
private static class InsertAsyncTask extends AsyncTask<Student, Void, Void> {
StudentDao mStudentDao;
public InsertAsyncTask(StudentDao studentDao) {
mStudentDao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
mStudentDao.insertStudents(students);
return null;
}
}
public void deleteStudents(Student... students) {
new DeleteAsyncTask(mStudentDao).execute(students);
}
private static class DeleteAsyncTask extends AsyncTask<Student, Void, Void> {
StudentDao mStudentDao;
public DeleteAsyncTask(StudentDao studentDao) {
mStudentDao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
mStudentDao.deleteStudent(students);
return null;
}
}
public void deleteAllStudents() {
new DeleteAllAsyncTask(mStudentDao).execute();
}
private static class DeleteAllAsyncTask extends AsyncTask<Void, Void, Void> {
StudentDao mStudentDao;
public DeleteAllAsyncTask(StudentDao studentDao) {
mStudentDao = studentDao;
}
@Override
protected Void doInBackground(Void... voids) {
mStudentDao.deleteAllStudents();
return null;
}
}
public void updateStudents(Student... students) {
new UpdateAsyncTask(mStudentDao).execute(students);
}
private static class UpdateAsyncTask extends AsyncTask<Student, Void, Void> {
StudentDao mStudentDao;
public UpdateAsyncTask(StudentDao studentDao) {
mStudentDao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
mStudentDao.updateStudents(students);
return null;
}
}
public void queryStudents(Student... students) {
new QueryAsyncTask(mStudentDao).execute(students);
}
private static class QueryAsyncTask extends AsyncTask<Student, Void, Void> {
StudentDao mStudentDao;
public QueryAsyncTask(StudentDao studentDao) {
mStudentDao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
List<Student> studentList = mStudentDao.queryStudentList();
Log.d(TAG, studentList.toString());
return null;
}
}
}
布局文件
<?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/add_student"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加"
android:onClick="addStudent"
app:layout_constraintBottom_toTopOf="@+id/delete_one"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/delete_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除全部"
android:onClick="deleteAll"
app:layout_constraintBottom_toTopOf="@+id/update"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/delete_one" />
<Button
android:id="@+id/delete_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除一个"
android:onClick="deleteStudent"
app:layout_constraintBottom_toTopOf="@+id/delete_all"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/add_student" />
<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"
android:onClick="updateStudent"
app:layout_constraintBottom_toTopOf="@+id/query"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/delete_all" />
<Button
android:id="@+id/query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"
android:onClick="queryStudent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/update" />
</androidx.constraintlayout.widget.ConstraintLayout>
使用
public class MainActivity extends AppCompatActivity {
private DBEngine mDBEngine;
private Student mStudent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBEngine = new DBEngine(this);
mStudent = new Student();
mStudent.setAge(11);
mStudent.setName("TS");
}
public void addStudent(View view) {
mDBEngine.insertStudents(mStudent);
}
public void deleteAll(View view) {
mDBEngine.deleteAllStudents();
}
public void deleteStudent(View view) {
Student student = new Student();
student.setId(1);
mDBEngine.deleteStudents(student);
}
public void updateStudent(View view) {
Student student = new Student();
student.setId(1);
student.setName("ThunderSoft");
mDBEngine.updateStudents(student);
}
public void queryStudent(View view) {
mDBEngine.queryStudents(mStudent);
}
}