Flutter中sqflite(SQLite)数据库在Android本地的查找与导出方法
在Android设备上查找并导出sqflite数据库文件
一、为什么找不到数据库文件
sqflite在Android上默认将数据库存储在App的私有目录中,这个目录仅App自身可访问,普通文件管理器无法直接查看,需要借助调试工具或通过代码导出到公共目录。
二、查找数据库文件的方法
1. 调试设备(USB调试开启)
- 打开Android Studio,连接你的调试设备
- 打开右侧的
Device File Explorer(若未显示,可通过View > Tool Windows > Device File Explorer调出) - 导航到路径:
data/data/你的App包名/databases/myfirstdb.db- 包名可在
android/app/build.gradle的applicationId字段中找到,或对应Flutter项目pubspec.yaml里的name字段(通常为反向域名格式)
- 包名可在
2. 非调试/已安装APK的设备
这类设备无法直接访问App私有目录,需通过App内部代码将数据库复制到公共存储目录(如Download)后再查看,具体步骤见下文导出方法。
三、导出数据库/数据的方法
方法1:通过Flutter代码导出数据库文件
添加以下代码,将数据库复制到设备的Download目录:
import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:sqflite/sqflite.dart' as sql; Future<void> exportDatabase() async { // 获取sqflite默认的数据库存储路径 String dbDir = await sql.getDatabasesPath(); File sourceDb = File('$dbDir/myfirstdb.db'); // 获取公共存储的Download目录 Directory? externalDir = await getExternalStorageDirectory(); if (externalDir != null) { String targetPath = '${externalDir.path}/Download/myfirstdb_backup.db'; await sourceDb.copy(targetPath); print('数据库已导出至:$targetPath'); } }
- 权限配置:在
android/app/src/main/AndroidManifest.xml中添加存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/> <!-- Android 13及以上需添加媒体权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
调用exportDatabase()后,即可在设备的Download文件夹找到备份的数据库文件,后续可使用SQLite可视化工具(如SQLiteStudio、DB Browser for SQLite)打开并导出为SQL脚本或其他格式。
方法2:通过Android Studio导出到电脑
- 按照「调试设备查找方法」找到
myfirstdb.db文件 - 右键点击文件,选择
Save As,将数据库保存到本地电脑 - 使用SQLite可视化工具打开本地文件,导出所需格式的数据(如SQL脚本、CSV等)
内容的提问来源于stack exchange,提问作者BRAYAN ADAN GUTIERREZ RODRIGUE
相关产品推荐
相关产品推荐

