要使用DuckDB,您必须首先使用duckdb_open()
初始化一个duckdb_database
句柄。duckdb_open()
的参数是要读取和写入的数据库文件。特殊值NULL
(nullptr
)可用于创建一个内存数据库。请注意,对于内存数据库,没有数据会持久化到磁盘(即,当您退出进程时,所有数据都会丢失)。
使用duckdb_database
句柄,您可以通过duckdb_connect()
创建一个或多个duckdb_connection
。虽然单个连接是线程安全的,但在查询期间它们会被锁定。因此,建议每个线程使用自己的连接,以实现最佳的并行性能。
所有duckdb_connection
必须显式地使用duckdb_disconnect()
断开连接,并且duckdb_database
必须显式地使用duckdb_close()
关闭,以避免内存和文件句柄泄漏。
Example
duckdb_database db;
duckdb_connection con;
if (duckdb_open(NULL, &db) == DuckDBError) {
// handle error
}
if (duckdb_connect(db, &con) == DuckDBError) {
// handle error
}
// run queries...
// cleanup
duckdb_disconnect(&con);
duckdb_close(&db);
API Reference Overview
duckdb_state duckdb_open(const char *path, duckdb_database *out_database);
duckdb_state duckdb_open_ext(const char *path, duckdb_database *out_database, duckdb_config config, char **out_error);
void duckdb_close(duckdb_database *database);
duckdb_state duckdb_connect(duckdb_database database, duckdb_connection *out_connection);
void duckdb_interrupt(duckdb_connection connection);
duckdb_query_progress_type duckdb_query_progress(duckdb_connection connection);
void duckdb_disconnect(duckdb_connection *connection);
const char *duckdb_library_version();
duckdb_open
创建一个新的数据库或打开存储在给定路径的现有数据库文件。 如果没有给出路径,则会创建一个新的内存数据库。 实例化的数据库应使用'duckdb_close'关闭。
Syntax
duckdb_state duckdb_open(
const char *path,
duckdb_database *out_database
);
Parameters
path
: 磁盘上数据库文件的路径,或nullptr
或:memory:
以打开内存数据库。out_database
: 结果数据库对象。
Return Value
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_open_ext
duckdb_open 的扩展版本。创建一个新的数据库或打开存储在给定路径的现有数据库文件。 实例化的数据库应使用 'duckdb_close' 关闭。
Syntax
duckdb_state duckdb_open_ext(
const char *path,
duckdb_database *out_database,
duckdb_config config,
char **out_error
);
Parameters
path
: 磁盘上数据库文件的路径,或nullptr
或:memory:
以打开内存数据库。out_database
: 结果数据库对象。config
: (可选)用于启动数据库系统的配置。out_error
: 如果设置并且函数返回DuckDBError,这将包含启动失败的原因。 请注意,必须使用duckdb_free
释放错误。
Return Value
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_close
关闭指定的数据库并释放为该数据库分配的所有内存。
在使用通过duckdb_open
或duckdb_open_ext
分配的任何数据库后,应调用此函数。
请注意,未能调用duckdb_close
(例如,在程序崩溃的情况下)不会导致数据损坏。
尽管如此,建议在使用完数据库对象后始终正确关闭它。
Syntax
void duckdb_close(
duckdb_database *database
);
Parameters
database
: 要关闭的数据库对象。
duckdb_connect
打开与数据库的连接。连接是查询数据库所必需的,并且存储与连接相关的事务状态。 实例化的连接应使用'duckdb_disconnect'关闭。
Syntax
duckdb_state duckdb_connect(
duckdb_database database,
duckdb_connection *out_connection
);
Parameters
database
: 要连接的数据库文件。out_connection
: 结果连接对象。
Return Value
DuckDBSuccess
on success or DuckDBError
on failure.
duckdb_interrupt
中断正在运行的查询
Syntax
void duckdb_interrupt(
duckdb_connection connection
);
Parameters
connection
: 要中断的连接
duckdb_query_progress
获取正在运行的查询的进度
Syntax
duckdb_query_progress_type duckdb_query_progress(
duckdb_connection connection
);
Parameters
connection
: 工作连接
Return Value
如果没有进度则为-1,否则为进度的百分比
duckdb_disconnect
关闭指定的连接并释放为该连接分配的所有内存。
Syntax
void duckdb_disconnect(
duckdb_connection *connection
);
Parameters
connection
: 要关闭的连接。
duckdb_library_version
返回链接的DuckDB的版本,开发版本带有版本后缀
通常用于开发必须返回此值以进行兼容性检查的C扩展。
Syntax
const char *duckdb_library_version(
);