如何使用C/C++访问CnosDB?是否提供官方C/C++客户端?
使用C/C++访问CnosDB数据库的方法
一、官方客户端支持情况
CnosDB目前没有官方提供的C/C++专属客户端,但可以通过两种主流兼容方式实现数据库访问。
二、访问方式及实现示例
1. 通过HTTP API直接访问
CnosDB兼容InfluxDB的Line Protocol与HTTP API,可直接用C/C++的HTTP客户端库(如libcurl)发送请求,完成数据写入、查询等操作。
数据写入示例(C语言 + libcurl)
#include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { // 替换为你的CnosDB集群地址、端口及目标数据库 curl_easy_setopt(curl, CURLOPT_URL, "http://your_cnosdb_host:8902/api/v1/write?db=your_database"); // 若开启认证,替换为实际用户名和密码 curl_easy_setopt(curl, CURLOPT_USERPWD, "username:password"); // 构造Line Protocol格式的写入数据 const char *post_data = "temperature,location=room1 value=25.6 1680000000000000000"; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_data); // 执行写入请求 res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "写入失败: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; }
编译命令:gcc write.c -o write -lcurl
数据查询示例(C语言 + libcurl)
#include <stdio.h> #include <curl/curl.h> #include <string.h> size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; strcat((char*)userp, (char*)contents); return realsize; } int main(void) { CURL *curl; CURLcode res; char response[1024] = {0}; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { // 替换为你的CnosDB地址、数据库及查询语句 curl_easy_setopt(curl, CURLOPT_URL, "http://your_cnosdb_host:8902/api/v1/query?db=your_database&q=SELECT * FROM temperature WHERE location='room1'"); // 若开启认证,替换为实际用户名和密码 curl_easy_setopt(curl, CURLOPT_USERPWD, "username:password"); // 设置回调函数接收查询响应 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, response); // 执行查询请求 res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "查询失败: %s\n", curl_easy_strerror(res)); else printf("查询结果:\n%s\n", response); curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; }
编译命令:gcc query.c -o query -lcurl
2. 复用InfluxDB的C/C++客户端库
由于CnosDB兼容InfluxDB协议,可直接使用成熟的InfluxDB C/C++客户端库(如influxdb-cxx),仅需将连接地址替换为CnosDB的地址即可。
示例(C++ + influxdb-cxx)
先安装influxdb-cxx库,再编写代码:
#include <influxdb/influxdb.hpp> #include <iostream> int main() { // 初始化客户端,替换为你的CnosDB地址、数据库名及认证信息 auto db = influxdb::InfluxDBFactory::Get("http://username:password@your_cnosdb_host:8902/your_database"); // 写入数据 db->write(influxdb::Point{"temperature"} .addTag("location", "room1") .addField("value", 25.6) .setTimestamp(std::chrono::system_clock::now())); // 查询并打印数据 auto points = db->query("SELECT * FROM temperature WHERE location = 'room1'"); for (const auto& point : points) { std::cout << "标签: " << point.getTags() << " 字段: " << point.getFields() << std::endl; } return 0; }
编译命令需根据库的安装方式调整,确保链接对应的依赖库。
三、关键注意事项
- 确保CnosDB的HTTP端口(默认8902)对外开放,客户端与集群网络可达。
- 若集群开启认证,所有请求必须携带正确的用户名和密码。
- Line Protocol格式需严格符合规范,否则会导致数据写入失败。
内容的提问来源于stack exchange,提问作者xufei Alex
相关产品推荐
相关产品推荐

