当前位置: 首页 > news >正文

Jetpack——Room

概述

  • Room是谷歌公司推出的数据库处理框架,该框架同样基于SQLite,但它通过注解技术极大简化了数据库操作,减少了原来相当一部分编码工作量。
  • 在使用Room之前,要先修改模块的build.gradle文件,往dependencies节点添加下面两行配置,标识导入指定版本的Room库:

implementation ‘androidx.room:room-runtime:2.2.5’
annotationProcessor ‘androidx.room:room-compiler:2.2.5’

annotationProcessor:注解处理器

使用步骤

以录入书籍信息为例,使用Room框架的编码过程分为下列五部:

1、编写书籍信息表对应的实体类,该类添加“@Entity”注解

package com.example.study_android.entity;import androidx.room.Entity;
import androidx.room.PrimaryKey;@Entity
public class BookInfo {@PrimaryKey(autoGenerate = true)private int id;public String name;public String author;public double price;@Overridepublic String toString() {return "BookInfo{" +"id=" + id +", name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}

2、编写书籍信息表对应的持久化类,该类添加“@Dao”注解

@Dao
public interface BookDao {@Insertvoid insert(BookInfo... book);@Deletevoid delete(BookInfo... book);@Query("DELETE FROM BookInfo")void deleteAll();@Updateint update(BookInfo... book);@Query("SELECT * FROM BookInfo")List<BookInfo> queryAll();@Query("SELECT * FROM BookInfo WHERE name=:name ORDER BY id DESC limit 1")BookInfo queryByName(String name);
}

3、编写书籍信息表对应的数据库类,该类从RoomDatabase派生而来,并添加“@Database”注解

package com.example.study_android.database;import androidx.room.Database;
import androidx.room.RoomDatabase;import com.example.study_android.dao.BookDao;
import com.example.study_android.entity.BookInfo;@Database(entities = {BookInfo.class}, version = 1, exportSchema = true)
public abstract class BookDatabase extends RoomDatabase {// 获取该数据库中某张表的持久化对象public abstract BookDao bookDao();
}
  • entities:表示该数据库有哪些表
  • exportSchema:表示是否导出数据库信息的json串,建议设为false,若设为true还需指定json文件的保存路径

在build.gradle中添加导出路径

        javaCompileOptions {annotationProcessorOptions {//指定数据库schema导出的位置arguments += mapOf("room.schemaLocation" to "$projectDir/schemas","room.incremental" to "true")}}

4、在自定义的Application类中声明书籍数据库的唯一实例

public class MyApplication extends Application {private static MyApplication mApp;// 声明一个书籍数据库对象private BookDatabase bookDatabase;public static MyApplication getInstance() {return mApp;}// App启动时调用@Overridepublic void onCreate() {super.onCreate();mApp = this;// 构建书籍数据库的实例bookDatabase = Room.databaseBuilder(this, BookDatabase.class, "'book")// 允许迁移数据库(发生数据库变更时,Room默认删除原数据库再创建新数据库,如此一来原来的记录会丢失,故而要改为迁移方式以便保存原有记录).addMigrations()// 允许主线程中操作数据库(Room默认不能在主线程中操作数据库).allowMainThreadQueries().build();}public BookDatabase getBookDB() {return bookDatabase;}
}

5、在操作书籍信息表的地方获取数据表的持久化对象

bookDao = MyApplication.getInstance().getBookDB().bookDao();@Overridepublic void onClick(View view) {String name = et_book_name.getText().toString();String author = et_author.getText().toString();String price = et_price.getText().toString();switch (view.getId()) {case R.id.btn_save:BookInfo book = new BookInfo();book.name = name;book.author = author;book.price = Double.parseDouble(price);bookDao.insert(book);ToastUtil.show(this, "保存成功");break;case R.id.btn_del:BookInfo b2 = new BookInfo();b2.id = 1;bookDao.delete(b2);break;case R.id.btn_edit:BookInfo b3 = new BookInfo();BookInfo b4=bookDao.queryByName(name);b3.id = b4.id;b3.name = name;bookDao.update(b3);break;case R.id.btn_query:List<BookInfo> list = bookDao.queryAll();StringBuilder sb = new StringBuilder();for (BookInfo b : list) {sb.append(b.toString());}tv_result.setText(sb);break;}}

案例代码

http://www.lryc.cn/news/444750.html

相关文章:

  • Dynamic Connected Networks for Chinese Spelling Check(ACL2021)
  • 前端vue-3种生命周期,只能在各自的领域使用
  • el-upload如何自定展示上传的文件
  • 研1日记15
  • 基于Nginx搭建点播直播服务器
  • QT LineEdit显示模式
  • IT技术在数字化转型中的关键作用
  • 【C++指南】C++中nullptr的深入解析
  • 解决启动docker desktop报The network name cannot be found的问题
  • Guava: 探索 Google 的 Java 核心库
  • Qt-qmake概述
  • 【protobuf】ProtoBuf的学习与使用⸺C++
  • 【iOS】MVC架构模式
  • ML 系列:机器学习和深度学习的深层次总结(08)—欠拟合、过拟合,正确拟合
  • Unity-物理系统-刚体加力
  • 深入探究PR:那些被忽视却超实用的视频剪辑工具
  • Unity-麦克风输入相关
  • NLP--自然语言处理学习-day1
  • ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition
  • Matlab自学笔记36:日期时间型的概念、分类和创建方法
  • Spring Boot自定义配置项
  • 【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
  • 什么时候用synchronized,什么时候用Reentrantlock
  • [ffmpeg]音频格式转换
  • SSRF工具类-SsrfTool
  • python集合运算介绍及示例代码
  • 『功能项目』按钮的打开关闭功能【73】
  • Linux 常用命令 - more 【分页显示文件内容】
  • Kotlin Android 环境搭建
  • 常见协议及其默认使用的端口号