【问题标题】:Can I export my sqlite database from Flutter?我可以从 Flutter 中导出我的 sqlite 数据库吗?
【发布时间】:2019-06-06 11:56:20
【问题描述】:

关于如何从 csv、另一个数据库等导入内部数据库中的数据有很多文章。但我还没有找到任何人解释如何导出 Flutter 数据库。

目标是为每部手机创建备份。 (所以我需要了解它的位置以创建备份)

【问题讨论】:

  • 你在用flutter包 sqflite 吗?
  • 是的,我就是这么用的

标签: android sqlite flutter


【解决方案1】:

我假设您使用 sqflite 插件进行 SQLite 操作,使用 path_provider 进行存储。可以使用

找到数据库的路径
String path = await getDatabasesPath(); // which is data/data/<package_name>/databases

另外,sqflite 插件不提供任何方式来导入/导出数据库,这里是一个开放的issue,如果你真的想这样做,你必须在本地使用MethodChannel 来做,这里是Android 和 AFAIK 的解决方案,在 iOS 中无法做到这一点。

【讨论】:

  • 好的,但是对于 ios 有解决方案吗?显然总是原生
  • @AlexPad 我认为没有任何适用于 iOS 的解决方案。
  • @AlexPad 我测试了这个方法,它适用于 iOS(模拟器)和 Android(模拟器)。
【解决方案2】:

如果你使用Sqlite创建数据库:

第1步:创建数据库时,为它设置一个目录,你可以像这样使用path_provider:

var dir = await getApplicationDocumentsDirectory();
_dbPath = dir.path + '/$dbName';

所以现在你知道它是什么目录和路径了。

第2步:然后使用flutter_archive插件压缩文件(这会将文件压缩到一个目录中,即你的数据库);

第 3 步:使用 flutter_email_sender 通过电子邮件发送,如下所示:

final email = Email(
      body: 'content',
      subject: 'content',
      recipients: ['email'],
      cc: ['email'],
      attachmentPaths: [exportPath],
      isHTML: false,
    );
    await FlutterEmailSender.send(email);

您需要提供exportPath,即您设置的zip文件路径。

它对我们有用,希望这对其他人有帮助!

【讨论】:

  • 实际上当你的数据库打开时,你不能存档它,我认为你需要先关闭数据库,这有点挑战,就像你在运行时如何做到一样?
【解决方案3】:

通常在 Android 上,数据库存储在 /data/data/your.app.signature.here/databases/。 但我不知道这在 Flutter 应用上是否有所不同。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 2015-09-04
    • 2023-03-04
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多