当前位置: 首页 > 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.mrgr.cn/news/34939.html

相关文章:

  • 水政渔政船、轮渡邮轮及作业船舶监控:视频监控在水利水资源保护中的应用
  • 程序员下班以后做什么副业合适?_35技术人员副业
  • async await执行顺序
  • 中文文本词性分析-技术实现-python
  • 旷视科技ShuffleNetV1代码分析[pytorch版]
  • Apache Cordova和PhoneGap
  • 关于考试监听切屏的三种方式
  • 【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
  • excel 时间戳与日期转换
  • 9_23_QT窗口
  • Java--认识泛型(2)
  • vue3 数字滚动组件封装
  • 如何只用 CSS 制作网格?
  • 从理论到实践:业务能力建模在数字化转型中的落地实施路径
  • 二.python基础语法
  • SpringBoot使用hutool操作FTP
  • 软设每日打卡——在一个页式存储管理系统中,页表内容如下所示: 若页的大小为4KB,则地址转换机构将逻辑地址0转换成物理地址(块号在0开始计算)为
  • 开创远程就可以监测宠物健康新篇章
  • 降维技术内涵及使用代码
  • C++(学习)2024.9.23