web-dev-qa-db-fra.com

Flutter sqflite ouvrir une base de données existante

Comment ouvrir une base de données existante à partir d'actifs avec flutter et sqflite? J'ai lu ce guide: https://github.com/tekartik/sqflite/blob/master/doc/opening_db.md#preloading-data

Mais mon application affiche une erreur de table introuvable. Merci.

6
david

Le guide Ouverture d'une base de données d'actifs explique les étapes à suivre pour regrouper et ouvrir une base de données SQLite préexistante dans votre application Flutter :.

Tout d'abord, vous devez modifier votre configuration pubspec.yaml Pour faire référence à votre fichier de base de données SQLite préexistant, afin qu'il soit intégré à votre application lors de sa création. Dans cet exemple suivant, nous supposerons que le fichier existe dans assets/demo.db Sous le répertoire de votre application 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

Ensuite, dans l'initialisation de votre application, vous devrez copier les données du fichier groupé dans un emplacement utilisable, car la ressource groupée elle-même ne peut pas être directement ouverte en tant que fichier sur Android.

La fonction sqflite.getDatabasesPath() retournera le répertoire à utiliser pour cela. Ce sera généralement quelque chose comme /data/data/org.example.myapp/databases/ Sur Android. Avec cela en main, vous pouvez charger les données d'octets de votre ressource groupée et créer le fichier de base de données accessible en écriture de l'application, ici nommé 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);

Enfin, vous pouvez ouvrir le fichier de base de données créé au démarrage de l'application:

var db = await openDatabase(dbPath);
3
Arto Bendiken