.NET MAUI应用SQLite本地数据库存储路径问题及优化咨询
.NET MAUI SQLite数据库路径问题解决
Android模拟器上的数据库存储路径
你用FileSystem.AppDataDirectory在Android模拟器中对应的实际路径是:
/data/data/{你的应用包名}/files/Student.db3
比如你的应用包名是com.example.StudentCRUD,完整路径就是/data/data/com.example.StudentCRUD/files/Student.db3
要找到这个文件,你可以通过Android Studio的Device File Explorer:
- 打开Android Studio并连接模拟器
- 打开Device File Explorer(路径:View > Tool Windows > Device File Explorer)
- 按照上述路径导航,就能找到目标数据库文件
关于将数据库保存到项目当前目录的问题
Android系统对应用安装目录有严格的只读限制,AppDomain.CurrentDomain.BaseDirectory指向的就是这个只读目录,所以无法在这里写入数据库文件,这也是你尝试后无效的原因。
如果想要更方便地访问数据库文件,可以选择以下两种可行方案:
方案1:保存到外部公共文档目录
需要先在AndroidManifest.xml中添加存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然后修改路径代码:
string dbPath = Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).AbsolutePath, "Student.db3"); _dbConnection = new SQLiteAsyncConnection(dbPath);
这个路径在模拟器中是/storage/emulated/0/Documents/Student.db3,可以直接通过模拟器的文件管理器找到。
方案2:保存到应用外部私有目录(无需额外权限)
这个目录属于应用私有,但可以通过文件管理器访问(部分Android版本需开启显示隐藏文件):
string dbPath = Path.Combine(Android.App.Application.Context.GetExternalFilesDir(null).AbsolutePath, "Student.db3"); _dbConnection = new SQLiteAsyncConnection(dbPath);
对应的路径是/storage/emulated/0/Android/data/{你的应用包名}/files/Student.db3
桌面端能否访问Android模拟器的本地数据库?
直接跨系统访问是做不到的,因为Android模拟器的文件系统和桌面端是完全隔离的。你可以通过以下两种方式获取数据库文件:
- 使用Android Studio的Device File Explorer找到数据库文件,右键选择
Save As导出到桌面端 - 在应用中添加导出逻辑,将数据库文件复制到外部存储目录,再从模拟器的共享位置导出到桌面
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

