7

我在处理两个数据库时遇到了一点问题。我将颤振与飞镖和 sqlite 包 sqflite 一起使用。

问题描述:我的资产中有两个数据库(assets/masterdata.db 和 assets/usr.db)。masterdata.db 不时有新数据,在 usr.db 中我存储用户数据。我想复制一次 usr.db 和 masterdata.db 每次至少更新应用程序。

问题:有没有办法为两个数据库使用“附加数据库”,我该怎么做?

问题2:或者在更新masterdata的同时还有另一种方法可以将表的数据保存在usr.db中吗?我想避免在 onUpdate 事件中为新的主数据编写 100 条插入语句。而且使用 csv 文件获取新数据听起来也不是很聪明。

提前感谢您的任何提示。

4

1 回答 1

6

在您的 masterdata 数据库助手中,您可以执行类似的操作来附加数据库

    Future<Database> attachDb({Database db, String databaseName, String databaseAlias}) async {
      Directory documentDirectory = await getApplicationDocumentsDirectory();
      String absoluteEndPath = join(documentDirectory.path, databaseName);
      await db.rawQuery("ATTACH DATABASE '$absoluteEndPath' as '$databaseAlias'");
      return db;
    }

因此,当您初始化数据库时,您可以运行

    attachDb(
        db:db,
        databaseName:"usr.db",
        databaseAlias:"USER_DATABASE",
    );

然后您可以像这样在查询中引用数据库

    db.rawQuery("SELECT * FROM USER_DATABASE.table_name");
于 2019-05-29T16:01:54.387 回答