# OpenMLDB C++ SDK 快速上手 ## 1. 请先编译安装或下载 C++ SDK 包 编译: ``` cd OpenMLDB make && make install ``` ## 2. 部署 OpenMLDB Server 详细文件配置及步骤请参考:https://openmldb.ai/docs/zh/v0.6/quickstart/openmldb_quickstart.html ## 3. 编写用户代码 openmldb_api.h 和 sdk/result_set.h 是必须 include 的头文件。 ``` #include #include #include #include "openmldb_api.h" #include "sdk/result_set.h" int main() { // 创建并初始化 OpenmldbHandler 对象 // 单机版:参数(ip, port),如:OpenmldbHandler handler("127.0.0.1", 6527); // 集群版:参数(ip:port, path),如:OpenmldbHandler handler("127.0.0.1:6527", "/openmldb"); // 在此以单机版为示例。 OpenmldbHandler handler("127.0.0.1", 6527); // 定义数据库名 std::time_t t = std::time(0); std::string db = "test_db" + std::to_string(t); // 创建 SQL 语句,创建数据库 std::string sql = "create database " + db + ";"; // 执行 SQL 语句,execute() 函数返回 bool 值,值为 true 表示正确执行 std::cout << execute(handler, sql); // 创建 SQL 语句,使用数据库 sql = "use " + db + ";"; std::cout << execute(handler, sql); // 创建 SQL 语句,创建表 sql = "create table test_table (" "col1 string, col2 bigint," "index(key=col1, ts=col2));"; std::cout << execute(handler, sql); // 创建 SQL 语句,向表中插入行 sql = "insert test_table values(\"hello\", 1)"; std::cout << execute(handler, sql); sql = "insert test_table values(\"Hi~\", 2)"; std::cout << execute(handler, sql); // 普通模式 sql = "select * from test_table;"; std::cout << execute(handler, sql); // 获得最近一次 SQL 的执行结果 auto res = get_resultset(); // 输出 SQL 的执行结果 print_resultset(res); // 本示例中输出应该为: // +-------+--------+ // | col1 | col2 | // +-------+--------+ // | hello | 1 | // | Hi~ | 2 | // +-------+---------+ // 带参模式 // SQL 语句中待填参数的位置用 ? 来表示 sql = "select * from test_table where col1 = ? ;"; // 创建 ParameterRow 对象,用于填充参数 ParameterRow para(&handler); // 填入参数 para << "Hi~"; // 执行 SQL 语句,execute_parameterized() 函数返回 bool 值,值为 true 表示正确执行 execute_parameterized(handler, db, sql, para); res = get_resultset(); print_resultset(res); // 本示例中输出应该为: // +------+--------+ // | col1 | col2 | // +------+-------+ // | Hi~ | 2 | // +------+--------+ // 请求模式 sql = "select col1, sum(col2) over w as w_col2_sum from test_table " "window w as (partition by test_table.col1 order by test_table.col2 " "rows between 2 preceding and current row);"; RequestRow req(&handler, db, sql); req << "Hi~" << 3l; execute_request(req); res = get_resultset(); print_resultset(res); // 本示例中输出应该为: // +------+--------------------+ // | col1 | w_col2_sum | // +------+--------------------+ // | Hi~ | 5 | // +------+--------------------+ } ``` ## 4. 编译与运行 ``` gcc .cxx -o -lstdc++ -std=c++17 -I/include -L/lib -lopenmldbsdk -lpthread ./ ```