Database Inspector:是什么,如何使用SQLite和调试Room

作者: IT Sectr 发布日期: 2026-05-07 阅读时间: 8 分钟

Android Studio中的Database Inspector — 是一个内置工具,用于实时查看和调试移动应用程序的SQLite数据库。根据Android Developers(2025)官方文档,该工具允许对活动数据库执行SQL查询、查看表结构以及在不停止应用程序的情况下编辑记录。该工具支持Room、SQLiteOpenHelper和任何应用内数据库,在启动性能分析时会自动检测它们。

要点

  • Database Inspector — 是Android Studio的一个组件,用于实时查看应用程序的SQLite数据库并能够执行查询
  • Room支持 — 与Room完全集成,包括查看DAO查询和跟踪数据库中的更改
  • 数据编辑 — 从检查器界面直接更改表格单元格的值,并立即反映在应用程序中
  • SQL执行 — 能够编写和执行任意SQL查询,包括JOIN、GROUP BY和子查询
  • 数据库导出 — 将数据库转储保存到计算机以进行分析或传递给同事

什么是Database Inspector?

Database Inspector — 是Android Studio中用于检查和调试移动应用程序中本地数据库的工具。它允许查看应用程序创建的所有SQLite数据库,包括Room、SQLiteOpenHelper和第三方库的数据库。该工具自Android Studio 4.1起可用,可通过Android Profiler或直接从View菜单启动。

用途和功能

Database Inspector的主要任务是在开发过程中可视化数据。开发人员无需将数据库内容输出到日志或编写单独的屏幕来查看数据,只需打开Database Inspector即可立即看到所有表、它们的模式和内容。该工具支持关系型SQLite数据库以及带有自动迁移功能的Room。

何时使用Database Inspector

在需要检查操作后数据存储的正确性的场景中,该工具不可或缺:用户注册、与服务器同步、列表缓存。无需编写测试UI,数据库转储可通过Database Inspector查看。该工具还用于调试Room迁移——每次模式更新后都可以查看表的当前模式。

Database Inspector如何工作

Database Inspector通过Android Profiler Service 连接到Android应用程序的进程。它检测应用程序中所有打开的SQLite连接,并将其显示在侧面板中。需要API Level 26(Android 8.0)及以上的Debug版本应用程序才能工作。

架构和工作机制

启动时,Database Inspector在设备上的应用程序和计算机上的IDE之间创建ADB隧道。SQLite数据库的WAL(预写日志)文件通过此隧道传输以显示内容。SQL命令通过Room和SQLiteDatabase中的Database Inspector支持直接发送到应用程序的SQLite引擎。该工具自动检测应用程序打开数据库的时刻,并将其添加到检查列表。

环境要求

Database Inspector正常运行需要:Android Studio 4.1+、API Level 26+的设备或模拟器、应用程序的Debug版本。对于Room,还需要room-runtime库2.2+版本。如果数据库以WAL模式创建(Room 2.2+的默认设置),该工具可以在不阻塞主应用程序的情况下读取数据。

kotlin
// Database Inspector支持的Room数据库示例
@Database(
    entities = [User::class, Order::class],
    version = 2,
    autoMigrations = [AutoMigration(from = 1, to = 2)]
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
    abstract fun orderDao(): OrderDao
}

Database Inspector的主要功能

Database Inspector提供一整套功能用于处理本地数据:从查看表模式到执行复杂的SQL查询和编辑记录。

查看表和模式

在左侧面板中显示所有数据库和表。选择表后,其内容以表格形式打开,包含列:所有记录字段显示为列,每一行是一条单独的记录。表模式(名称、类型、约束)显示在顶部。对于外键,显示表之间的关联。

数据类型SQLite类型Room类型示例
整数INTEGERInt, Long42
字符串TEXTString“John”
浮点数REALDouble, Float3.14
二进制数据BLOBByteArray[0x00, 0x01]
日期/时间INTEGER(Unix纪元)Long, Date1720000000

执行SQL查询

Query选项卡允许直接对所选数据库执行任意SQL命令。支持SELECT、INSERT、UPDATE、DELETE、CREATE INDEX、JOIN以及任何其他SQLite操作符。结果以表格形式显示在查询编辑器下方。查询历史记录在会话期间保存。

编辑记录

表格单元格可以直接编辑——只需点击值并输入新值。更改会立即应用于正在运行的应用程序。这对于测试边界情况特别有用:在必填字段中设置null、将ID替换为不存在的ID、检查长字符串的处理。所有更改都实时记录。

使用Database Inspector调试Room

Database Inspector与Room深度集成,使其在使用此库开发应用程序时不可或缺。除了标准功能外,检查器还提供Room特定的功能。

查看DAO查询

对于Room数据库,Database Inspector显示每个DAO方法的生成的SQL查询。这可以验证Room生成正确的SQL,特别是对于包含JOIN、@Relation和@Transaction的复杂查询。如果Room执行低效查询(例如,N+1个查询而不是一个JOIN),这在Database Inspector的查询日志中立即可见。

调试迁移

在使用AutoMigration或手动迁移更新Room模式时,Database Inspector会显示迁移后表的当前结构。只需在启动应用程序后打开检查器,检查所有列、索引和外键是否已正确创建。如果迁移失败并出现错误,数据库将无法打开——工具将显示最后一个可用版本。

检查Relations和Embedded

Room允许通过@Relation和@Embedded组合多个表中的数据。Database Inspector通过并排显示相关表的数据,帮助直观地检查关系的正确性。对于每个外键,可以一键导航到相关表。

kotlin
// 用于通过Database Inspector检查的带有Relation的实体
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String
)

data class UserWithOrders(
    @Embedded val user: User,
    @Relation(parentColumn = "id", entityColumn = "user_id")
    val orders: List<Order>
)

Database Inspector的实际使用场景

Database Inspector解决了在使用本地数据存储时出现的特定编程任务。让我们看看日常工作中该工具最常见的用例。

检查数据缓存

应用程序通常将API响应缓存在本地数据库中。Database Inspector允许确保缓存的正确性:同步完成后,可以在缓存表中看到当前记录。如果数据没有出现——问题出在存储代码中。如果出现重复项——问题出在upsert逻辑中。

调试数据插入错误

当DAO方法不保存数据但不抛出异常时,Database Inspector显示表的当前状态。典型原因:主键冲突(OnConflictStrategy设置)、列中数据类型错误、违反NOT NULL约束或外键约束。检查器允许查看操作前后的数据库变更集。比较DAO调用前后的数据快照——这是在复杂写操作中调试事务错误和检查应用程序业务逻辑正确性的最有效方法之一。

重构数据库模式

在更改表模式时——添加列、重命名字段、拆分表——Database Inspector帮助检查迁移结果。只需使用新版本的数据库启动应用程序,并确保所有数据已正确迁移到新结构。如果迁移后数据丢失,可以从重构前保存的转储中恢复。此场景在从SQLiteOpenHelper迁移到Room或在新版本应用程序中更改现有表结构时尤为重要。

监控查询性能

Database Inspector也可用于评估SQL查询的性能。通过Query选项卡执行SELECT并测量响应时间,可以识别缺少索引的查询。Room自动在Logcat中记录慢查询,标记为SLOW SQL,而Database Inspector允许立即执行EXPLAIN QUERY PLAN来分析执行计划。

常见问题

为什么Database Inspector看不到我的数据库?

确保应用程序在Debug模式下运行,并且设备的API Level为26或更高。如果数据库是在单独的进程中或使用SQLCipher(加密)创建的,Database Inspector可能无法检测到它。对于SQLCipher,使用没有加密的辅助调试数据库。

可以通过Database Inspector编辑数据吗?

是的,可以编辑数据直接在表格单元格中进行。双击值即可更改。更改会立即应用于正在运行的应用程序的数据库。要添加新记录,请通过Query选项卡使用INSERT SQL查询。

Database Inspector支持Realm数据库吗?

不,Database Inspector不支持Realm,因为Realm不使用SQLite。要调试Realm,请使用Realm Object Server、Realm Studio或应用程序中的日志记录。对于MongoDB Realm SDK,可以在macOS、Windows和Linux上使用其自己的Realm Studio工具。

如何从Database Inspector导出数据库?

Database Inspector允许完整导出数据库。右键单击列表中的数据库名称,然后选择Export Database。.db文件将保存在计算机上。要查看它,请使用任何SQLite浏览器,例如DB Browser for SQLite。

Database Inspector会影响应用程序的性能吗?

根据Google的说法,开销非常小——Database Inspector读取数据库的WAL文件,不会阻塞写入。执行自定义SQL查询可能会暂时增加数据库负载,但这由开发人员控制。对于生产版本,该工具会自动禁用。

总结

  • Database Inspector — 是Android Studio中内置的工具,用于实时查看和编辑应用程序的SQLite数据库
  • Room支持包括查看DAO查询、调试迁移和检查@Relation和@Embedded
  • 执行SQL查询通过Query选项卡,支持所有SQLite操作符并保存历史记录
  • 实时编辑允许更改单元格值并立即在正在运行的应用程序中查看结果
  • 数据库导出为.db文件,用于在外部工具中分析或传递给同事
  • 工作需要Android Studio 4.1+、Debug版本和API Level 26+——如果工具不显示数据库,请检查这些要求
  • 在开发与本地数据存储相关的功能时定期使用Database Inspector——这能大大加快调试速度

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读