上一篇
安卓开发创建的数据库在哪
- 行业动态
- 2025-04-22
- 7
安卓开发中数据库的存储位置与访问方法
默认存储路径
安卓应用创建的数据库(通常为SQLite数据库)默认存储在应用安装目录下的 /databases/
文件夹中,具体路径格式如下:
设备类型 | 路径示例 | 说明 |
---|---|---|
物理设备/模拟器 | /data/data/<包名>/databases/<数据库名>.db |
需Root权限或ADB访问 |
Android模拟器 | /mnt/sdcard/Android/data/<包名>/databases/ |
部分模拟器支持直接导出 |
访问数据库的常见方式
-
通过Android Studio查看
- 使用 Device File Explorer 面板,展开
data → data → <包名> → databases
目录。 - 需开启开发者选项中的 “调试数据库” 功能(仅限根设备或模拟器)。
- 使用 Device File Explorer 面板,展开
通过ADB命令导出
adb shell "run-as <包名> cp /data/data/<包名>/databases/<数据库名>.db /sdcard/" adb pull /sdcard/<数据库名>.db ./
直接查询数据库
在ADB shell中使用SQLite工具:adb shell run-as <包名> sqlite3 /data/data/<包名>/databases/<数据库名>.db
自定义存储路径
若需将数据库存储在应用私有目录外(如SD卡),需在创建时指定路径:
// 自定义路径示例(需申请WRITE_EXTERNAL_STORAGE权限) String dbPath = getExternalFilesDir(null) + "/mydatabase.db"; SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(new File(dbPath), null);
存储位置 | 优点 | 缺点 |
---|---|---|
默认路径(/databases) | 自动管理,无需权限 | 仅应用自身可访问 |
外部存储(如SD卡) | 可跨设备共享 | 需动态申请权限,Android 11+受限 |
多数据库管理
- 同一应用可创建多个数据库,文件名通过
SQLiteOpenHelper
构造函数指定。 - 删除数据库需手动删除文件:
File dbFile = new File("/data/data/" + getPackageName() + "/databases/mydb.db"); dbFile.delete();
相关问题与解答
问题1:如何备份应用数据库?
解答:
- 通过ADB导出数据库文件:
adb pull /data/data/<包名>/databases/<数据库名>.db backup/
- 编程实现备份(需存储权限):
// 将数据库复制到外部存储 File source = new File("/data/data/" + getPackageName() + "/databases/mydb.db"); File dest = new File(getExternalFilesDir(null), "mydb_backup.db"); try (InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(dest)) { ByteStreams.copy(in, out); }
问题2:Android 11+如何访问应用数据库?
解答:
- 方法1:通过
adb shell
配合run-as
命令(需设备已授权):adb shell run-as com.example.myapp cat /data/data/com.example.myapp/databases/mydb.db > mydb.sql
- 方法2:使用
BackupAgent
或FileObserver
监听数据库变化,通过备份API获取数据(需用户授权