Zum Inhalt springen

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:

Terminal window
flutter pub add dart_duckdb

Dadurch 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: Kommandozeilenanwendung
  • duckdbexplorer: 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/[email protected]/+esm"
}
}
</script>
<script type="module">
import * as duckdb from "https://cdn.jsdelivr.net/npm/@duckdb/[email protected]/+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.