Room数据库框架的使用

张开发
2026/4/10 9:34:20 15 分钟阅读

分享文章

Room数据库框架的使用
一、引入依赖//Room数据库框架implementation androidx.room:room-runtime:2.4.0annotationProcessor androidx.room:room-compiler:2.4.0二、数据库的初始化1、从studio的asset目录中读取并复制到内存缓存中try { ProjectListDataBase projectListDB Room.databaseBuilder(mActivity.getApplicationContext(), ProjectListDataBase.class, GlobalConstant.BRIDGE_DETECT_DB_NAME) .setJournalMode(RoomDatabase.JournalMode.TRUNCATE) .createFromAsset(GlobalConstant.BRIDGE_DETECT_DB_NAME) .addMigrations(UpdateDB.BRIDGE_DETECT_MIGRATION_1_2) .allowMainThreadQueries() .build(); } catch (Exception e) { LogUtils.log(e.toString()); }2、可以从指定路径中读取数据库String dbPath FileUtils.getFileBasePath() File.separator uid File.separator File.separator GlobalConstant.PROJECT_DB_NAME; File file new File(dbPath); if (file.exists()) { projectDB Room.databaseBuilder(getApplicationContext(), ProjectDataBase.class, dbPath) .setJournalMode(RoomDatabase.JournalMode.TRUNCATE) .addMigrations(UpdateDB.PROJECT_MIGRATION_1_2) // .fallbackToDestructiveMigration() .allowMainThreadQueries() .build(); } else { LogUtils.log(initProjectDB: 数据库不存在------); }三、定义数据实体Parcelize Entity(tableName project_member_check_result) public class ResultListBean { PrimaryKey NonNull ColumnInfo(name project_task_id) public Integer taskId; NonNull ColumnInfo(name check_user_id) public Integer checkUserId; NonNull ColumnInfo(name check_time) public String checkTime; Ignore public int totalCount; Ignore public int detectCount; //非表中字段 }四、定义数据访问对象DAODao public interface ResultListDao { Insert(onConflict REPLACE) long insert(ResultListBean bean); Query(SELECT * FROM project_member_check_result WHERE project_task_id :taskId and create_user_id :uid) ResultListBean getResultByTaskId(int taskId, int uid); Query(delete from project_member_check_result where project_task_id :taskId and create_user_id :uid) int deleteByTaskId(int taskId, int uid); }五、‌创建数据库类DatabaseDatabase(entities {ProjectListBean.class, ResultListBean.class},version BRIDGE_DETECT_ROOM_VERSION,exportSchema false) public abstract class ProjectListDataBase extends RoomDatabase { public abstract ProjectListDao getProjectListDao(); public abstract ResultListDao getResultListDao(); }六、数据库的使用DiseaseDao diseaseDao projectDB.getDiseaseDao(); ListDiseaseBean diseaseBeans diseaseDao.getDiseaseListByLevel(bean.diseaseLevel, bean.typeUuid);七、数据库的升级在RoomDatabase中初始化时指定version。在第二步数据库初始化的时候提到方法 .addMigrations(UpdateDB.BRIDGE_DETECT_MIGRATION_1_2)这是用来数据库升级的方法代码中是从数据库版本1升级到版本2public static Migration BRIDGE_DETECT_MIGRATION_1_2 new Migration(1, 2) { Override public void migrate(NonNull SupportSQLiteDatabase database) { try { database.execSQL(CREATE TABLE IF NOT EXISTS tunnel_list ( id TEXT PRIMARY KEY NOT NULL, company_id INTEGER NOT NULL, longitude TEXT, flag INTEGER, tunnel_id INTEGER NOT NULL, check_time TEXT, deck_pavement INTEGER )); } catch (Exception e) { LogUtils.log(BRIDGE_DETECT_MIGRATION_1_2、、、、、、); } } };

更多文章