Sqflite扑朔迷离,使用两个数据库(附加)

Atu*_*ius 5 sqlite dart flutter sqflite

我在处理两个数据库方面有一个小问题。我正在使用带有dart的flutter和sqlite软件包sqflite。

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

问题:是否可以对两个数据库使用“附加数据库”,我该怎么做?

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

预先感谢您的任何提示。

Jør*_*sen 5

在您的 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

    attachDb(
        db:db,
        databaseName:"usr.db",
        databaseAlias:"USER_DATABASE",
    );
Run Code Online (Sandbox Code Playgroud)

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

    db.rawQuery("SELECT * FROM USER_DATABASE.table_name");
Run Code Online (Sandbox Code Playgroud)