应用程序更新/升级后Sqflite数据丢失

问题描述 投票:0回答:2

我正在构建一个使用 sqflite^2.0.2 将数据存储为本地数据库的应用程序。

一切正常,但在设备上更新应用程序时出现问题:所有数据都丢失了。一旦应用程序升级或重新安装,数据库似乎就会被删除。其行为与 Android 模拟器上的行为相同。

我已经尝试在

AndroidManifest.xml
中添加 android:allowBackup="true",即使 - 如 documentation 所示 - 应该备份数据库,它仍然无法工作。

由于数据库结构没有更新,只是实际的 Flutter 应用程序更新了,所以数据库版本应该保留 1(?)。

static Future<Database> init() async {
  WidgetsFlutterBinding.ensureInitialized();

  final database = openDatabase(
    join(await getDatabasesPath(), 'myDatabase.db'),
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE myOrders (id TEXT PRIMARY KEY, name TEXT, quant INTEGER)',
      );
    },
    version: 1, 
  );
  return database;
}

上面的代码初始化我的数据库,

join()
返回以下路径:
/data/user/0/com.example.myapp/databases/myDatabase.db

不幸的是,这没有帮助:https://stackoverflow.com/a/62845264/11442598

我错过了什么吗?如有任何帮助,我们将不胜感激。

android flutter dart android-manifest sqflite
2个回答
0
投票

问题解决了。

首先,我尝试使用 path_provider 来确保数据库每次都使用正确的路径。这不起作用,但对于 iOS 来说这仍然是一个很好的做法正如 sqflite 所推荐的那样。

下一步是将数据库重命名为其他名称,也许数据库的实例不止一个(?)。

然后我删除并再次下载我的 Android 模拟器,选择一个已安装

Google Play

最后我添加了

<application android:allowBackup="true"/>
串入

AndroidManifest.xml



我在所有这些操作之间运行了

flutter clean

flutter pub get

经过几次尝试,数据不再丢失了。


0
投票
谢谢。这真的节省了我的时间。您的解决方案完全有效。

© www.soinside.com 2019 - 2024. All rights reserved.