android jetpack room文章一
此文,为room的第一篇随笔,记录room的基础使用方式。后续还会记录一些补充的内容。
app.gradle导入库:
dependencies {
// 当前 targetSdk 32
// API 33 可以使用2.5.0
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
构建表单对象:
@Entity(tableName = "teacher_table")
public class Teacher {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "name")
public String name;
@ColumnInfo(name = "age")
public String age;
public static Teacher[] getTeachers() {
Teacher[] teachers = new Teacher[1000];
for (int i = 0; i < teachers.length; i++) {
Teacher teacher = new Teacher();
teacher.name = "老师" + i;
teacher.age = "岁:" + i;
teachers[i] = teacher;
}
return teachers;
}
}
构建Dao对象(读、写数据库的类):
@Dao
public interface TeacherDao {
// 向表中,插入数据
@Insert
void insetTeachers(Teacher... teachers);
// 删除所有数据
@Query("delete from teacher_table")
void deleteAllTeachers();
// 查看所有数据
@Query("select * from teacher_table order by id")
DataSource.Factory<Integer, Teacher> getAllTeachers();
}
构建数据库对象:
@Database(
entities = {Teacher.class},
version = 1,
exportSchema = false
)
public abstract class AppDatabase extends RoomDatabase {
private static final String DB_NAME = "swalkaDb";
private static volatile AppDatabase instance = null;
public static AppDatabase getInstance(Context appContext) {
if (null == instance) {
synchronized (AppDatabase.class) {
if (null == instance) {
instance = Room.databaseBuilder(
appContext,
AppDatabase.class,
DB_NAME
)
// 允许在主线程创建数据库。一般不建议在主线程构建数据库
.allowMainThreadQueries()
.build();
}
}
}
return instance;
}
public abstract TeacherDao teacherDao();
}
Activity中使用:
// 构建/打开 数据库。建议在子线程中使用 AppDatabase appDatabase = AppDatabase.getInstance(getApplicationContext()); // 获取到操作类 TeacherDao dao = appDatabase.teacherDao(); // TODO 开始数据库操作,在子线程操作数据库
备注:
1、代码由Java实现,如果是 kotlin,在 gradle 导入时,需要先导入 kapt 插件(可在往期随笔中查看如何导入 kapt 插件),同时修改 annotationProcessor 为 kapt
2、此笔记为单表结构,后续会发出关联表结构

浙公网安备 33010602011771号