一键导入
c
XuguDB C 语言驱动开发完整指南,涵盖三种 C 接口: NCI(虚谷原生接口,兼容 Oracle OCI 命名风格)、 OCI(Oracle OCI 兼容接口,便于 Oracle 应用迁移)、 XGCI(虚谷简化接口,API 更简洁)。 适用于需要高性能 C/C++ 应用连接虚谷数据库的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
XuguDB C 语言驱动开发完整指南,涵盖三种 C 接口: NCI(虚谷原生接口,兼容 Oracle OCI 命名风格)、 OCI(Oracle OCI 兼容接口,便于 Oracle 应用迁移)、 XGCI(虚谷简化接口,API 更简洁)。 适用于需要高性能 C/C++ 应用连接虚谷数据库的场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Activiti 工作流引擎与虚谷数据库(XuguDB)集成适配指南。当用户需要在 Spring Boot 项目中使用 Activiti 工作流引擎连接 XuguDB 时使用此技能,包括流程引擎配置、数据源设置、BPMN 流程定义、任务管理、历史记录查询等。适用于企业级工作流应用、审批流程、业务流程自动化等场景。
AnyLine 动态数据源框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 AnyLine 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括动态数据源注册、切换、元数据操作、DDL/DML 自动生成等。适用于数据中台、低代码平台、异构数据库迁移等场景。
Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Azkaban 的工作流管理器配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、工作流定义、任务调度、监控管理等。适用于大数据作业调度和管理场景。
Camunda BPM 平台适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Camunda 的工作流和决策自动化平台配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、BPMN 流程定义、任务管理、REST API、UI 管理界面等。适用于企业级工作流应用、审批流程、业务流程自动化、案例管理等场景。
CloudBeaver 云数据库管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要使用 CloudBeaver 连接和管理虚谷数据库时使用此技能,包括部署安装、驱动配置、连接管理、用户权限等。适用于团队协作、远程数据库管理场景。
DataEase 开源 BI 工具适配虚谷数据库(XuguDB)的完整指南。当用户需要将 DataEase 连接到虚谷数据库进行数据可视化分析时使用此技能,包括驱动配置、数据源连接、数据集创建、仪表板设计等。适用于企业数据可视化、自助分析、报表分享等场景。
| name | 虚谷数据库 C 语言驱动开发 |
| name_for_command | xugudb-c |
| description | XuguDB C 语言驱动开发完整指南,涵盖三种 C 接口: NCI(虚谷原生接口,兼容 Oracle OCI 命名风格)、 OCI(Oracle OCI 兼容接口,便于 Oracle 应用迁移)、 XGCI(虚谷简化接口,API 更简洁)。 适用于需要高性能 C/C++ 应用连接虚谷数据库的场景。 |
| tags | xugudb, c, nci, oci, xgci, native, driver |
虚谷数据库提供三种 C 语言接口,适用于不同场景:
| 接口 | 全称 | 定位 | 适用场景 |
|---|---|---|---|
| NCI | Native Call Interface | 虚谷原生 C 接口 | 新项目首选,API 风格类似 Oracle OCI |
| OCI | Oracle Call Interface | Oracle 兼容接口 | Oracle C 应用迁移到虚谷 |
| XGCI | Xugu Call Interface | 虚谷简化接口 | 追求简洁 API 的 C/C++ 项目 |
NCI 和 OCI 接口几乎相同,仅前缀不同(NCI → OCI):
| NCI | OCI | 说明 |
|---|---|---|
| NCIEnvCreate | OCIEnvCreate | 创建环境句柄 |
| NCIHandleAlloc | OCIHandleAlloc | 分配句柄 |
| NCIServerAttach | OCIServerAttach | 连接服务器 |
| NCISessionBegin | OCISessionBegin | 开始会话 |
| NCIStmtPrepare | OCIStmtPrepare | 预编译 SQL |
| NCIStmtExecute | OCIStmtExecute | 执行 SQL |
| NCIBindByName | OCIBindByName | 按名绑定参数 |
| NCIDefineByPos | OCIDefineByPos | 按位定义输出列 |
| NCIStmtFetch | OCIStmtFetch | 获取结果行 |
从 Oracle OCI 迁移到虚谷:只需将 OCI 前缀替换为 NCI(或直接使用 OCI 兼容层)
XGCI 使用四级句柄模型,API 更简洁:
HT_ENV → HT_SERVER → HT_SESSION → HT_STATEMENT
核心 API:
XGCIHandleAlloc() — 分配句柄XGCIHandleAttrSet() — 设置连接属性(IP/端口/库名)XGCISessionBegin() — 登录XGCIExecDirect() — 直接执行 SQLXGCIDefineByPos() — 定义输出列XGCIFetch() — 获取结果XGCISessionEnd() — 退出会话XGCIHandleFree() — 释放句柄#include "nci.h"
NCIEnv* env; NCIError* err; NCISvcCtx* ctx; NCIStmt* stmt;
// 初始化
NCIEnvCreate(&env, NCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
NCIHandleAlloc(env, &err, NCI_HTYPE_ERROR, 0, NULL);
// 连接(简化方式)
NCILogon(env, err, &ctx, "SYSDBA", 6, "SYSDBA", 6, "127.0.0.1:5138/SYSTEM", 22);
// 预编译执行
NCIHandleAlloc(env, &stmt, NCI_HTYPE_STMT, 0, NULL);
NCIStmtPrepare(stmt, err, "SELECT id FROM test", 20, NCI_NTV_SYNTAX, NCI_DEFAULT);
int id;
NCIDefine* def;
NCIDefineByPos(stmt, &def, err, 1, &id, 4, SQLT_INT, NULL, NULL, NULL, NCI_DEFAULT);
NCIStmtExecute(ctx, stmt, err, 0, 0, NULL, NULL, NCI_DEFAULT);
while (NCIStmtFetch(stmt, err, 1, NCI_FETCH_NEXT, NCI_DEFAULT) == NCI_SUCCESS) {
printf("%d\n", id);
}
// 释放
NCIHandleFree(stmt, NCI_HTYPE_STMT);
NCILogoff(ctx, err);
NCIHandleFree(err, NCI_HTYPE_ERROR);
NCIHandleFree(env, NCI_HTYPE_ENV);
#include "xgci.h"
XGCIHANDLE henv, hserver, hsession, hstmt;
unsigned short port = 5138;
// 初始化句柄链
XGCIHandleAlloc(NULL, &henv, HT_ENV);
XGCIHandleAlloc(henv, &hserver, HT_SERVER);
// 设置连接属性
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_IP, "127.0.0.1", XGCI_NTS);
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_PORT, &port, 0);
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_DBNAME, "SYSTEM", XGCI_NTS);
// 创建会话和语句
XGCIHandleAlloc(hserver, &hsession, HT_SESSION);
XGCIHandleAlloc(hsession, &hstmt, HT_STATEMENT);
// 登录
XGCISessionBegin(hsession, "SYSDBA", "SYSDBA");
// 直接执行 SQL
XGCIExecDirect(hstmt, "SELECT id, name FROM test", XGCI_NTS);
int id; char name[20];
int rc[2], len[2];
XGCIDefineByPos(hstmt, 1, &id, 4, XG_C_INTEGER, &rc[0], &len[0]);
XGCIDefineByPos(hstmt, 2, name, 20, XG_C_CHAR, &rc[1], &len[1]);
while (XGCIFetch(hstmt) == XGCI_SUCCESS) {
printf("%d, %s\n", id, name);
}
// 释放
XGCIHandleFree(hstmt);
XGCISessionEnd(hsession);
XGCIHandleFree(hserver);
XGCIHandleFree(henv);
当用户咨询 C 语言驱动开发相关问题时: