#sqlite #dart #flutter #sqflite
#sqlite #dart #flutter #sqflite
Вопрос:
У меня небольшая проблема с обработкой двух баз данных. Я использую flutter с dart и пакет sqlite sqflite.
Описание проблемы: У меня есть две базы данных в моем активе (assets / masterdata.db и assets / usr.db). В masterdata.db время от времени появляются новые данные, а в usr.db я сохраняю пользовательские данные. Я хочу копировать usr.db один раз и masterdata.db каждый раз, по крайней мере, при обновлении приложения.
Вопрос: Есть ли способ использовать «прикрепить базу данных» для двух баз данных и как я могу это сделать?
Вопрос 2: Или есть другой способ сохранить данные таблиц внутри usr.db при обновлении masterdata? Я хочу избежать написания 100 инструкций insert для новых masterdata в событии onUpdate. А также использование csv-файлов для новых данных звучит не очень разумно.
Заранее благодарю вас за любую подсказку.
Ответ №1:
В вашем вспомогательном модуле базы данных 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");
Комментарии:
1. Примечание: при вызове
attachDB()
из другого места, пожалуйста, убедитесь, что добавленоawait
ключевое слово.