Sqflite в флаттере, работа с двумя базами данных (прикрепить) - PullRequest
4 голосов
/ 14 марта 2019

У меня небольшая проблема с обработкой двух баз данных.Я использую flutter с dart и пакет sqlite sqflite.

Описание проблемы: у меня в активе две базы данных (assets / masterdata.db и assets / usr.db).В masterdata.db время от времени появляются новые данные, а в usr.db я храню пользовательские данные.Я хочу скопировать usr.db один раз и masterdata.db по крайней мере каждый раз с обновлением приложения.

Вопрос: есть ли способ использовать «присоединить базу данных» для двух баз данных и как я могу это сделать?

Вопрос 2: Или есть другой способ сохранить данные таблиц внутри usr.db при обновлении основных данных?Я хочу избежать записи 100 операторов вставки для новых masterdata в событии onUpdate.А также использование CSV-файлов для новых данных звучит не очень умно.

Заранее благодарен за любую подсказку.

1 Ответ

0 голосов
/ 29 мая 2019

В вашем помощнике базы данных 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");
...