使用数据库检查器调试数据库

数据库检查器可让您在应用运行时检查、查询和修改应用的数据库。这对于数据库调试特别有用。数据库检查器适用于纯 SQLite 以及基于 SQLite 构建的库,例如 Room

打开数据库检查器

如需在数据库检查器中打开数据库,请执行以下操作

  1. 在运行 API 级别 26 或更高版本的模拟器或连接的设备上运行您的应用

  2. 在菜单栏中,选择 View > Tool Windows > App Inspection

  3. 选择 Database Inspector 标签页。

  4. 从菜单中选择正在运行的应用进程。

  5. 当前正在运行的应用中的数据库会显示在Databases 窗格中。展开您要检查的数据库节点。

查看和修改数据

Databases 窗格显示了应用中的数据库列表以及每个数据库包含的表。双击表名称可在右侧检查器窗口中显示其数据,如图 1 所示。单击列标题可按该列对检查器窗口中的数据进行排序。

Screenshot of the Database Inspector window.
图 1. 数据库检查器窗口。

要修改表中的数据,请按以下步骤操作

  1. 双击单元格。
  2. 输入新值。
  3. Enter

如果您的应用使用 Room 并且您的界面观察数据库(例如使用 LiveDataFlow),则您对数据所做的任何更改都会立即在正在运行的应用中显示。否则,更改仅在您的应用下次从数据库读取修改后的数据时才会显示。

实时查看数据库更改

如果您希望数据库检查器在您与正在运行的应用交互时自动更新其显示的数据,请选中检查器窗口顶部的 Live updates 复选框。启用实时更新后,检查器窗口中的表是只读的,您无法修改其值。

或者,要手动更新数据,请单击检查器窗口顶部的 Refresh table 按钮。

查询您的数据库

数据库检查器可以在应用运行时对应用的数据库运行查询。如果您的应用使用 Room,该工具可以使用 DAO 查询,但也支持自定义 SQL 查询。

运行 DAO 查询

如果您的应用使用 Room,Android Studio 会提供 gutter 操作,可让您快速运行已在 DAO 类中定义的查询方法。当您的应用正在运行且数据库检查器在 IDE 中打开时,这些操作可用。

要运行 DAO 中的任何查询方法,请单击其 @Query 注解旁边的 Run SQLite statement in Database Inspector 按钮。

Screenshot of DAO gutter actions.
图 2. DAO 查询 gutter 操作。

如果您的应用包含多个数据库,Android Studio 会提示您从列表中选择要查询的数据库。如果您的查询方法包含命名绑定参数,Android Studio 会在运行查询之前请求每个参数的值。查询结果显示在检查器窗口中。

运行自定义 SQL 查询

您也可以使用数据库检查器在应用运行时对应用的数据库运行自定义 SQL 查询。

要查询数据库,请按以下步骤操作

  1. 单击 Databases 窗格顶部的 Open New Query tab ,在检查器窗口中打开一个新标签页。

    Screenshot indicating the new query tab button.
    图 3. 打开 New Query 标签页。
  2. 如果您的应用包含多个数据库,请在 New Query 标签页上的列表中选择要查询的数据库。

  3. New Query 标签页顶部,在文本字段中输入您的自定义 SQL 查询。

  4. 单击 Run

或者,使用查询历史记录功能运行您之前使用过的查询

  1. 单击 Show query history Show query history button 按钮,查看您之前对选定数据库运行的查询列表。

    Screenshot showing the query history drop-down.
    图 4. 查询历史记录菜单。
  2. 单击列表中的查询可在编辑器中看到完整查询的预览,然后按 Enter 将其复制到编辑器中。

  3. 单击 Run 执行语句。

New Query 标签页中显示的查询结果是只读的,无法修改。但是,您可以使用自定义 SQL 查询字段运行修改语句,例如 UPDATEINSERTDELETE

如果您的应用使用 Room 并且您的界面观察数据库(例如使用 LiveDataFlow),则您对数据所做的任何更改都会立即在正在运行的应用中显示。否则,更改仅在您的应用下次从数据库读取修改后的数据时才会显示。

离线模式

在 Android Studio 4.2 及更高版本中,进程断开连接后,您可以继续检查应用的数据库。这使得在应用崩溃后更容易调试。

断开连接发生时,数据库检查器会下载您的数据库,并在离线模式下提供给您。在离线状态下,您仍然可以打开表和运行查询。

当您重新连接到正在运行的应用进程时,数据库检查器会退出离线模式,并且仅显示设备上的数据。换句话说,离线模式下显示的数据在您重新连接到应用进程时不会持久保留。由于此限制,数据库检查器在离线模式下不允许您编辑数据或运行修改 SQL 语句。

当您在离线模式下查看数据库时,进程名称包含 [DETACHED],表示检查器不再附加到该进程。此外,数据库图标 Database offline 指示离线状态,如图 5 所示。

Database inspector in offline mode
图 5. 离线模式下的数据库检查器。

保持数据库连接打开

数据库检查器只能在您的应用与该数据库保持实时连接时修改数据库。这意味着如果您的应用频繁连接和断开数据库连接,可能很难调试这些数据库。Databases 窗格使用图标标识打开 和关闭 的数据库。

此外,要防止数据库连接关闭,请在 Databases 窗格顶部将 Keep database connections open 从关闭 切换到打开

从数据库检查器导出数据

您可以从数据库检查器导出数据库、表和查询结果,以便在本地保存、共享或重新创建。在 Android Studio 中打开应用项目并在数据库检查器中检查该项目的应用时,可以通过以下方式之一开始导出数据

  • Databases 面板中选择数据库或表,然后点击面板顶部的 Export to file
  • 右键点击 Databases 面板中的数据库或表,然后从上下文菜单中选择 Export to file
  • 在标签页中检查表或查询结果时,点击表或查询结果上方的 Export to file

选择导出操作后,使用 Export Database 对话框完成最后步骤,如图 6 所示。

根据您尝试导出数据库、表或查询结果,您可以选择以下一种或多种格式导出数据:DB、SQL 或 CSV。

Export Database dialog
box

图 6. Export Database 对话框。

其他资源

要了解有关数据库检查器的更多信息,请参阅以下其他资源

博文

视频