Room数据库框架使用(一)
最近在写一个教务软件,由于学校教务系统比较垃圾娇弱,前端页面经常崩溃,就打算本地保存一些数据。本来打算和往常一样用郭神的LitePal,后来寻思Jetpack推出Room好几年了,寻思着官方的框架肯定有它的独到之处,索性写个专题记录一下使用过程。
添加依赖
声明依赖项
使用框架第一步,先导包。老样子,我还是用Java
来写这个项目。
dependencies {
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
配置编译器选项
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}
}
}
OK,查看build
标签查看是否导入成功
如果导入不成功可以看看整个项目的setting.gradle
看看是否引入了jetpack库
maven { url 'https://jitpack.io' }
然后开始使用。
生成的本地文件
最开始我使用的是SQLite
原生数据库操作,他会生成一个.db
文件和一个.db-journal
文件,用Navicat
类的数据库管理软件打开可以查看结构和数据,LitePal
是基于SQLite
封装的框架,效果一样。
但是Room
是基于SQLite3
的数据库,但是有别于SQLite
,它会生成一个.db
文件、.db-shm
和一个.db-wal
文件
db-wal:从3.7.0版本开始,SQLite支持一种新的事务控制机制,称为“写前日志”或“WAL”。当数据库处于WAL模式时,到该数据库的所有连接都必须使用WAL。特定的数据库将使用回滚日志或WAL,但不能同时使用两者。WAL始终位于与数据库文件相同的目录中,并且具有与数据库文件相同的名称,但是附加了字符串“-wal”。
db-shm:从概念上讲,wal-index是共享内存,尽管当前的VFS实现为wal-index使用一个映射文件。映射文件位于与数据库相同的目录中,并具有与数据库相同的名称,后面附加了“-shm”后缀。因为WAL索引是共享内存,所以当客户机位于不同的机器上时,SQLite不支持网络文件系统上的journal_mode=WAL。数据库的所有用户必须能够共享相同的内存。
所以当要打开对应的数据库查看表结构的时候要同时把.db、.db-shm、.db-wal三个文件放在同一文件夹下,然后再数据库查看软件中导入对应的.db文件就可以查看数据库咯
其实官方还提供了另外一种方法,不过我没有找到相关位置。
使用 Database Inspector 调试数据库
在 Android Studio 4.1 及更高版本中,您可以利用 Database Inspector 在应用运行时检查、查询和修改应用的数据库。这对于数据库调试尤为有用。Database Inspector 可处理普通的 SQLite 数据库以及在 SQLite 的基础上构建的库(例如 Room)。
打开 Database Inspector
如需在 Database Inspector 中打开数据库,请执行以下操作:
-
在模拟器或搭载 API 级别 26 或更高版本的已连接设备上运行您的应用。
注意:与 Android 11 模拟器有关的已知问题会导致应用在连接到 DB Inspector 时发生崩溃。如需解决此问题,请按以下步骤操作。
-
从菜单栏中依次选择 View > Tool Windows > App Inspection。
-
选择 Database Inspector 标签页。
-
从下拉菜单中选择正在运行的应用进程。
-
当前正在运行的应用中的数据库显示在 Databases 窗格中。展开要检查的数据库的节点。
查看和修改数据
Databases 窗格显示应用中的数据库列表以及每个数据库包含的表格。双击表格名称即可在检查器窗口的右侧显示其数据。您可以点击列标题,按该列对检查器窗口中的数据进行排序。
图 1. Database Inspector 窗口。
您可以通过以下方式修改表中的数据:双击单元格,输入新值,然后按 Enter 键。如果您的应用使用 Room 并且界面会观察数据库(例如使用 LiveData
或 Flow
),那么您对数据所做的任何更改会立即显示在正在运行的应用中。否则,只有当应用下次从数据库中读取修改后的数据时,您才会看到更改。
查看实时数据库更改
如果您希望 Database Inspector 在您与正在运行的应用交互时自动更新它呈现的数据,请勾选检查器窗口顶部的 Live updates 复选框。启用实时更新后,检查器窗口中的表格将变为只读状态,您无法修改其中的值。
或者,您也可以通过点击检查工具窗口顶部的 Refresh table 按钮以手动更新数据。
查询数据库
Database Inspector 可以在应用运行时对应用的数据库运行查询。Database Inspector 可以在您的应用使用 Room 的情况下使用 DAO 查询,但也支持自定义 SQL 查询。