Android Studio查看SQLite数据库完全指南

    |     2026年9月5日   |   Android技术, 数据存储   |     0 条评论   |    27

一、先搞清楚:数据库到底藏在哪

知识点 1|SQLite 数据库就是一个普通文件

《数据库应用技术》里的 MySQL 有服务进程、有账号密码、要连端口。Android 的 SQLite 没有服务,整个数据库就是应用私有目录下的一个文件:

/data/data/<应用程序包名>/databases/<库名>.db

示例 1|推导秒哒快递的数据库完整路径

三个信息拼出来:

信息 来源 值
包名 app/build.gradle 的 applicationId edu.cdp.android.day07
库名 DbConstants.DB_NAME miaoda.db
固定目录 系统约定 /data/data/

所以本课工程的库文件完整路径是:

/data/data/edu.cdp.android.day07/databases/miaoda.db

提示:不确定包名时,别翻代码猜,直接看运行结果——示例工程 MainActivity.runCheck() 里有一行 db.getPath(),会把真实路径打印到界面和 Logcat,以它为准。

补充:/data/data/<包名> 和 /data/user/0/<包名> 是同一个目录(多用户的 0 号用户就是机主),在 Device Explorer 里看到哪个都一样,别以为是两个文件。


知识点 2|为什么你”看不到”这个文件

/data/data/ 下每个应用目录的权限是 drwx------(只有应用自己和 root 能进)。所以:

  • 真机(未 root):普通应用互相看不到,文件管理器也看不到;
  • debug 包(Android Studio 直接运行的包):系统给调试器开了后门(run-as 机制),Android Studio 的文件窗口因此能进 debug 包的目录;
  • 模拟器 / 已 root 设备:完全可见。

示例 2|用命令亲眼看一次权限

Android Studio 底部打开 Terminal(或命令行执行 adb shell):

adb shell ls -l /data/data/edu.cdp.android.day07/databases

典型输出(真机 debug 包):

drwxrwx--x 2 u0_a152 u0_a152 4096 2026-09-05 08:56 .
-rw-rw---- 1 u0_a152 u0_a152 28672 2026-09-05 08:56 miaoda.db

u0_a152 就是这个应用的 Linux 用户,别的用户没有 r 权限——这就是”文件明明在,却打不开”的根本原因。


二、总览:四种查看方案怎么选

方案 工具 适用场景 优点 局限
① 导出文件 + SQLiteStudio Device Explorer + SQLiteStudio 课堂主线,离线细看、改数据 可留存、可离线、功能全 要手动导出,注意 WAL(见知识点 5)
② Database Inspector Android Studio 自带 快速确认”数据写进去没” 零导出、实时刷新、可直接改 设备需 API 26+,只对运行中的进程
③ adb 命令行 run-as + adb pull 真机无 root、想写成一键脚本 可脚本化、最可靠 要会命令行,Windows 有换行符坑
④ 应用内导出 自己写 Java 工具类 兜底方案,答辩演示原理 不依赖任何工具 要加代码

课堂建议:先用方案②确认数据,再用方案①把文件导出来看结构,方案③④作为拓展。


三、方案一:Device Explorer 导出 + SQLiteStudio 查看(主线)

3.1 工具准备:安装 SQLiteStudio

SQLiteStudio 是免费开源的 SQLite 图形化管理工具,绿色免安装,解压即用。

示例 3|三步装好 SQLiteStudio(Windows)

  1. 下载 sqlitestudio-3.4.x-windows-x64.zip;
  2. 解压到任意目录,如 D:\Tools\SQLiteStudio;
  3. 双击 SQLiteStudio.exe 运行,无需安装。

⚠️ 安全提示:课件原始链接来自第三方网盘打包(gitcode 仓库的 zip),优先从官网或 GitHub 下载;如果用第三方包,装完先杀毒扫描再打开。工具本身开源免费,没必要冒险。

中文化:菜单 Tools → Preferences(配置)→ Environment → Language 选择”简体中文”,重启生效。首次若报缺少 DLL,说明下到了最小化版本,换完整便携版即可。


3.2 第一步:确认数据库文件已经生成

知识点 3|SQLiteOpenHelper 是懒加载,不建库就导不出文件

这是本节最大的坑:new ExpressOpenHelper(this) 只是创建了帮助类对象,数据库文件此时还不存在。只有调用

SQLiteDatabase db = helper.getWritableDatabase();

之后,系统才会在 databases/ 目录下真正创建 miaoda.db 并回调 onCreate() 建表。

示例 4|确认文件已生成

方法 A:运行示例工程 Day07Express,自检页会显示”数据库:miaoda.db 版本:1″和表列表;
方法 B:Device Explorer 里看 databases/ 目录下有没有 miaoda.db;
方法 C:命令行确认:

adb shell run-as edu.cdp.android.day07 ls databases

输出 miaoda.db 就说明可以导出了。如果目录是空的——先去 App 里点一次”重新检测”。


3.3 第二步:Device Explorer 导出

操作路径:菜单 View → Tool Windows → Device Explorer(旧版本叫 Device File Explorer,也可以直接点 Android Studio 左侧边栏的文件图标)。

然后在文件树里逐层展开:data → data → edu.cdp.android.day07 → databases,找到 miaoda.db,右键 → Save As…(Ctrl+Shift+S) 保存到电脑本地,例如 D:\db-backup\。


3.4 第三步:SQLiteStudio 打开与查看

示例 7|添加数据库(图文)

菜单 数据库(Database)→ 添加数据库(Add a database),弹出如下对话框:

  1. 数据类型:选 SQLite 3;
  2. 文件:点文件夹图标,选中刚才导出的 miaoda.db;
  3. 点 测试连接,提示成功后点 OK。

打开后左侧出现数据库树:miaoda → Tables(3),能看到 android_metadata(系统表)、tb_order、tb_user。双击 tb_user,上方有四个页签:

页签 内容
结构 列名、类型、约束(对照第 7 日讲义的表结构检查)
数据 表格化浏览,可直接双击单元格改数据
约束 / Indexes / 触发器 主键、唯一约束等
DDL 建表 SQL 原文(和你 DbConstants 里写的对照)

示例 8|用 SQL 验证数据(把第 7 日的 SQL 用起来)

点击工具栏的”SQL 编辑器”(打开 SQL 编辑区),执行:

-- ① 库里有哪些表(对应 MainActivity 的自检逻辑)
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;

-- ② 用户表行数(应与 App 自检页显示一致)
SELECT COUNT(*) FROM tb_user;

-- ③ 查演示账号
SELECT _id, username, phone, real_name, address
FROM tb_user
WHERE username = 'demo' AND password = '123456';

-- ④ 联表预演:订单带上发单人用户名(第 11、12 日会用到)
SELECT o._id, o.order_type, o.status, u.username
FROM tb_order o, tb_user u
WHERE o.user_id = u._id;

执行方式:选中语句后点击工具栏的 ▶ 执行按钮(或按 F9),结果在下方网格显示。

修改数据直接在”数据”页签双击单元格即可;注意保持 App 处于关闭状态再改,否则可能出现 database is locked。


四、方案二:Database Inspector(Android Studio 自带,零导出)

知识点 5|它是”连着运行中的 App”实时查看

Android Studio 4.1 起内置 Database Inspector(新版本在 App Inspection 窗口里),直接连上正在运行的进程查数据库,不用导出任何文件。

前提条件(缺一不可):

  1. 应用运行在 API 26+(Android 8.0) 的模拟器或真机上;
  2. 是 debug 包(Android Studio 直接 Run 出来的就是);
  3. 应用进程正在运行。

注意:本课工程 minSdk 14 不冲突—— Inspector 看的是设备系统版本,不是 minSdk。把工程跑到 API 26+ 的模拟器上即可。

示例 9|四步打开并查询

  1. 运行 App;
  2. 菜单 View → Tool Windows → App Inspection,选 Database Inspector 标签页;
  3. 顶部下拉框选中 edu.cdp.android.day07 进程;
  4. 左侧 Databases 面板展开 miaoda,双击 tb_user 查看数据;点 Open New Query tab 可执行自定义 SQL。

常用技巧:

开关 作用 什么时候用
Live updates App 一写库,表格自动刷新(开启后表格变只读) 调注册/登录流程,边点边看
Keep database connections open 阻止 Inspector 关闭数据库连接 App 频繁开关连接导致左侧列表”数据库忽隐忽现”时
离线模式(4.2+) 进程断开后仍可浏览刚下载的快照,标题带 [DETACHED] App 崩溃后继续查案发现场(只读,不能改)

示例 10|在 Inspector 里直接改数据

双击 tb_user 数据网格里的某个单元格 → 输入新值 → 回车,改动立即写进设备上的数据库。切回 App 点”重新检测”,行数与内容同步变化——这是向学生证明”数据库真的在本机”最直观的演示。

示例 11|从 Inspector 直接导出文件

在 Databases 面板右键数据库或表 → Export to file,支持三种格式:

格式 用途
DB 标准数据库文件,可再用 SQLiteStudio 打开
SQL 建表 + 插入语句的脚本,可跨库重建
CSV 表格数据,可拖进 Excel 做答辩附件

五、方案三:adb 命令行导出(真机无 root、可脚本化)

知识点 6|run-as 是 debug 包的后门

run-as <包名> 能让 shell 以该应用的 Linux 用户身份执行命令,只对 debuggable 的包有效(Android Studio Run 出来的 debug 包自动满足)。用它绕过知识点 2 里说的目录权限。

示例 12|最短可用的导出命令(重点看 exec-out)

adb exec-out run-as edu.cdp.android.day07 cat databases/miaoda.db > miaoda.db
adb exec-out run-as edu.cdp.android.day07 cat databases/miaoda.db-wal > miaoda.db-wal

⚠️ Windows 专属大坑:必须用 adb exec-out,不要用 adb shell!
adb shell ... > 文件 会把输出里的换行符 \n 自动替换成 Windows 的 \r\n,二进制文件被加进 \r 后直接损坏,SQLiteStudio 打开报 file is not a database。exec-out 输出原始字节流,不做任何转换。

示例 13|更稳的做法:经 /data/local/tmp 中转再 pull

:: 1. 拷到公共临时目录(run-as 内部 cp,不经过文本转换)
adb shell run-as edu.cdp.android.day07 cp databases/miaoda.db /data/local/tmp/miaoda.db

:: 2. pull 拉回电脑(pull 是纯二进制传输,无换行符问题)
adb pull /data/local/tmp/miaoda.db D:\db-backup\miaoda.db

把这两行存成 export-db.bat 放进工程目录,以后双击就导出,答辩演示前特别好用。

转载请注明来源:Android Studio查看SQLite数据库完全指南
本文链接地址:https://ai.zhousir.top/?p=3959
回复 取消