⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
Dart 客户端

DuckDB Dart 客户端的最新稳定版本是 1.4.4。

DuckDB.Dart 是 DuckDB 的原生 Dart API。

安装

可以通过 pub.dev 安装 DuckDB.Dart。请参阅 API 参考文档以获取详细信息。

将此包作为库使用

添加依赖

使用 Flutter 添加依赖

flutter pub add dart_duckdb

这将在您项目的 pubspec.yaml 中添加如下一行(并隐式运行 flutter pub get

dependencies:
  dart_duckdb: ^

或者,您的编辑器可能支持 flutter pub get。请查看您的编辑器文档以了解更多信息。

导入库

现在,您可以在 Dart 代码中导入它

import 'package:dart_duckdb/dart_duckdb.dart';

使用示例

请参阅 duckdb-dart 仓库中的示例项目

  • cli:命令行应用程序
  • duckdbexplorer:支持构建桌面操作系统以及 Android 和 iOS 平台的 GUI 应用程序。

以下是一些 DuckDB.Dart 的常用代码片段

查询内存数据库

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();
}

使用多个连接

DuckDB.Dart 会自动为每个连接管理专用的后台隔离区(Isolate),从而实现高效的非阻塞 I/O 以进行并发查询。每个连接在内部都有自己的隔离区,因此您可以简单地创建多个连接来进行并行操作。

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 支持

DuckDB.Dart 通过 DuckDB WASM 支持 Web 平台。对于 Flutter Web 构建,您需要配置必要的 JavaScript 依赖项。

Flutter Web 设置

将以下内容添加到 web/index.html<head> 部分,以加载 DuckDB WASM 和 Apache Arrow

<script type="importmap">
  {
    "imports": {
      "apache-arrow": "https://cdn.jsdelivr.net.cn/npm/[email protected]/+esm"
    }
  }
</script>
<script type="module">
  import * as duckdb from "https://cdn.jsdelivr.net.cn/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>

在 Flutter Web 中使用

配置完成后,您可以像在其他平台上一样使用 DuckDB

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();
}

有关更多特定于平台的详细信息,请参阅构建说明

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南