Dart-Client
Die aktuelle stabile Version des DuckDB-Dart-Clients ist 1.4.4.
DuckDB.Dart ist die native Dart-API für DuckDB.
Installation
DuckDB.Dart kann von pub.dev installiert werden. Details finden Sie in der API-Referenz.
Dieses Paket als Bibliothek verwenden
Abhängigkeit hinzufügen
Fügen Sie die Abhängigkeit mit Flutter hinzu:
flutter pub add dart_duckdbDadurch wird eine Zeile wie die folgende zur pubspec.yaml Ihres Pakets hinzugefügt (und implizit flutter pub get ausgeführt):
dependencies: dart_duckdb: ^Alternativ unterstützt Ihr Editor möglicherweise flutter pub get. Weitere Informationen finden Sie in der Dokumentation Ihres Editors.
Importieren
Nun können Sie es in Ihrem Dart-Code importieren:
import 'package:dart_duckdb/dart_duckdb.dart';Verwendungsbeispiele
Siehe die Beispielprojekte im Repository duckdb-dart:
cli: Kommandozeilenanwendungduckdbexplorer: GUI-Anwendung, die für Desktop-Betriebssysteme sowie Android und iOS gebaut wird.
Hier einige gängige Code-Schnipsel für DuckDB.Dart:
Eine In-Memory-Datenbank abfragen
import 'package:dart_duckdb/dart_duckdb.dart';
void main() async { final db = await duckdb.open(":memory:"); final connection = await duckdb.connect(db);
await connection.execute(''' CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER); INSERT INTO users VALUES (1, 'Alice', 30), (2, 'Bob', 25); ''');
final result = (await connection.query("SELECT * FROM users WHERE age > 28")).fetchAll();
for (final row in result) { print(row); }
connection.dispose(); db.dispose();}Mehrere Verbindungen verwenden
DuckDB.Dart verwaltet automatisch dedizierte Hintergrund-Isolates pro Verbindung und ermöglicht so effizientes, nicht blockierendes I/O für gleichzeitige Abfragen. Jede Verbindung verwaltet intern ihr eigenes Isolate, sodass Sie für parallele Operationen einfach mehrere Verbindungen erzeugen können:
import 'package:dart_duckdb/dart_duckdb.dart';
void main() async { final db = await duckdb.open(":memory:");
// Create a table final con1 = await duckdb.connect(db); await con1.execute(''' CREATE TABLE users (id INTEGER, name VARCHAR); INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob'); ''');
// Query from multiple connections concurrently final con2 = await duckdb.connect(db); final con3 = await duckdb.connect(db);
final future1 = con2.query("SELECT * FROM users WHERE id = 1"); final future2 = con3.query("SELECT * FROM users WHERE id = 2");
final result1 = (await future1).fetchAll(); final result2 = (await future2).fetchAll();
print(result1); print(result2);
con1.dispose(); con2.dispose(); con3.dispose(); db.dispose();}Web-Unterstützung
DuckDB.Dart unterstützt Web-Plattformen über DuckDB WASM. Für Flutter-Web-Builds müssen Sie die erforderlichen JavaScript-Abhängigkeiten konfigurieren.
Einrichtung für Flutter Web
Fügen Sie Folgendes in web/index.html innerhalb des Abschnitts <head> ein, um DuckDB WASM und Apache Arrow zu laden:
<script type="importmap"> { "imports": { "apache-arrow": "https://cdn.jsdelivr.net/npm/apache-arrow@17.0.0/+esm" } }</script><script type="module"> import * as duckdb from "https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@1.29.1-dev222.0/+esm"; import * as arrow from "apache-arrow"; window.duckdbWasmReady = new Promise((resolve) => { window.duckdbduckdbWasm = duckdb; window.ArrowTable = arrow.Table; resolve(); });</script>Verwendung in Flutter Web
Nach der Konfiguration können Sie DuckDB auf die gleiche Weise wie auf anderen Plattformen verwenden:
import 'package:dart_duckdb/dart_duckdb.dart';
void main() async { final db = await duckdb.open(":memory:"); final connection = await duckdb.connect(db);
await connection.execute(''' CREATE TABLE data (id INTEGER, value VARCHAR); INSERT INTO data VALUES (1, 'hello'), (2, 'world'); ''');
final result = (await connection.query("SELECT * FROM data")).fetchAll(); for (final row in result) { print(row); }
connection.dispose(); db.dispose();}Weitere plattformspezifische Details finden Sie in den Build-Anweisungen.