【问题标题】:Xamarin.Forms Android app SQLite data disappearsXamarin.Forms Android 应用 SQLite 数据消失
【发布时间】:2019-01-11 04:32:53
【问题描述】:
我正在使用 C# 为 Android 编写 Xamarin.Forms 应用程序。我将 Sqlite dB 设置在:System.Environment.SpecialFolder.Personal
当应用程序部署在设备上时,我可以添加数据然后检索它。
但是,当我第二天检查应用程序时(离线,没有从电脑调试),所有的 dB 数据都消失了。
这是否意味着dB文件在一段时间后消失了?
【问题讨论】:
标签:
c#
android
database
sqlite
xamarin.forms
【解决方案1】:
数据库中的数据不应该消失。
你确定你的数据库初始化代码没问题吗?也许每次您启动应用程序时,数据都会恢复到某个启动状态?
【解决方案2】:
sqlite 数据库中数据的神秘消失可能有多种原因。
确保你的 db 文件存在,也许你可以在某个地方实现一个小的调试按钮,它会抛出一个警报,告诉你文件是否存在。
但是使用 System.Environment.SpecialFolder.Personal 不应该是原因,我也将该文件夹用于我的应用程序。
其次,您是否主动提交交易?特别是当您的应用程序被后台处理时,我建议您调用 Commit() 以确保每个待处理的事务都被写入数据库,因为当您的应用程序处于后台时,您永远不知道垃圾收集器何时出现。
如果您使用多个线程,请确保您以支持多线程环境的模式打开数据库。
如果你用一个简单的方法打开你的 sqlite 数据库
SQLiteConnection conn = new SQLite.SQLiteConnection(path);
数据库将单线程打开。
试试这个:
SQLiteConnection conn = new SQLite.SQLiteConnection(path, SQLiteOpenFlags.Create | SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.NoMutex);
如果这没有帮助,请更深入地了解您的代码(如何打开数据库,如何插入/更新数据等...)