android jetpack room文章一
此文,为room的第一篇随笔,记录room的基础使用方式。后续还会记录一些补充的内容。
app.gradle导入库:
1 2 3 4 5 6 7 | 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" } |
构建表单对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @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对象(读、写数据库的类):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @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(); } |
构建数据库对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @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中使用:
1 2 3 4 5 | // 构建/打开 数据库。建议在子线程中使用 AppDatabase appDatabase = AppDatabase.getInstance(getApplicationContext()); // 获取到操作类 TeacherDao dao = appDatabase.teacherDao(); // TODO 开始数据库操作,在子线程操作数据库 |
备注:
1、代码由Java实现,如果是 kotlin,在 gradle 导入时,需要先导入 kapt 插件(可在往期随笔中查看如何导入 kapt 插件),同时修改 annotationProcessor 为 kapt
2、此笔记为单表结构,后续会发出关联表结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗