Флаттер sqflite открыть существующую базу данных - PullRequest
0 голосов
/ 03 ноября 2018

Как открыть существующую базу данных из активов с помощью flutter и sqflite? Я прочитал это руководство: https://github.com/tekartik/sqflite/blob/master/doc/opening_db.md#preloading-data

Но мое приложение показывает ошибку "not found table" Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2018

В руководстве Открытие базы данных активов объясняются шаги, которые необходимо выполнить для объединения и открытия ранее существующей базы данных SQLite в приложении Flutter:.

Во-первых, вы должны отредактировать конфигурацию pubspec.yaml так, чтобы она ссылалась на уже существующий файл базы данных SQLite, чтобы он был включен в ваше приложение при его создании. В следующем примере мы будем предполагать, что файл существует в assets/demo.db в каталоге вашего приложения Flutter:

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/demo.db

Далее при инициализации приложения вам нужно будет скопировать данные связанного файла в удобное для использования место, поскольку сам связанный ресурс не может быть непосредственно открыт в виде файла на Android.

Функция sqflite.getDatabasesPath() вернет каталог, который будет использоваться для этого. Обычно это будет что-то вроде /data/data/org.example.myapp/databases/ на Android. Имея это в виду, вы можете загрузить байтовые данные из вашего комплектного ресурса и создать файл базы данных приложения с возможностью записи, который здесь называется app.db:

// Construct the path to the app's writable database file:
var dbDir = await getDatabasesPath();
var dbPath = join(dbDir, "app.db");

// Delete any existing database:
await deleteDatabase(dbPath);

// Create the writable database file from the bundled demo database file:
ByteData data = await rootBundle.load("assets/demo.db");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);

Наконец, вы можете открыть созданный файл базы данных при запуске приложения:

var db = await openDatabase(dbPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...