C++接口
1.概述
以下通过一个简单的示例来介绍C++客户端程序通过libuxsql库访问UXDB实例的方法和步骤。
2.开发环境
这里的开发环境是指C++客户端的开发环境,对数据库服务端的运行环境不做要求。 OS:Windows10 X64 tool chain:VS2010&SP1
3.启动服务
Database server运行在linux环境下,数据库集群testlocal连接信息:IP为192.168.1.82,端口为5432,用户名为uxdb,密码为123456。
4.连接示例
-
在VS2010中新建“Win32控制台应用程序”, 附加选项选择“空项目”。选择“文件”=>“新建项目”=>“Visual C++”=>“Win32 控制台应用程序”,自定义名称(例:testc),单击“确定”=>“下一步”=>“附加选项中选择空项目”=>单击“完成”。


-
右键“源文件”=>“添加”=>“新建项”=>“C++文件(.cpp)”,名称自定义输入(例:main)。代码如下:
#include <stdio.h> #include <stdlib.h> /* * UXDB客户端头文件 */ #include "libuxsql-fe.h" static void exit_nicely(UXconn *conn) { UXSQLfinish(conn); exit(1); } int main(int argc, char **argv) { const char *conninfo; UXconn *conn; UXresult *res; int nFields; int i, j; /* * 如果用户在命令行上提供了一个参数,则拿它当作 conninfo 字串使用; * 否则缺省为 dbname=uxdb 并且使用环境变量或者所有其它连接参数 * 都使用缺省值。 */ if (argc > 1) conninfo = argv[1]; else conninfo = "host=192.168.1.82 port=5432 dbname=uxdb user=uxdb password=123456"; /* 连接数据库 */ conn = UXSQLconnectdb(conninfo); /* 检查后端连接成功建立 */ if (UXSQLstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", UXSQLerrorMessage(conn)); exit_nicely(conn); } /* * 我们的测试实例涉及游标的使用,这个时候我们必须使用事务块。 * 我们可以把全部事情放在一个 "select * from ux_database" * UXSQLexec() 里,不过那样太简单了,不是个好例子。 */ /* 开始一个事务块 */ res = UXSQLexec(conn, "BEGIN"); if (UXSQLresultStatus(res) != UXRES_COMMAND_OK) { fprintf(stderr, "BEGIN command failed: %s", UXSQLerrorMessage(conn)); UXSQLclear(res); exit_nicely(conn); } /* * 应该在结果不需要的时候 UXSQLclear UXresult,以避免内存泄漏 */ UXSQLclear(res); /* * 从系统表 ux_database(数据库的系统目录)里抓取数据 */ res = UXSQLexec(conn, "DECLARE myportal CURSOR FOR select * from ux_database"); if (UXSQLresultStatus(res) != UXRES_COMMAND_OK) { fprintf(stderr, "DECLARE CURSOR failed: %s", UXSQLerrorMessage(conn)); UXSQLclear(res); exit_nicely(conn); } UXSQLclear(res); res = UXSQLexec(conn, "FETCH ALL in myportal"); if (UXSQLresultStatus(res) != UXRES_TUPLES_OK) { fprintf(stderr, "FETCH ALL failed: %s", UXSQLerrorMessage(conn)); UXSQLclear(res); exit_nicely(conn); } /* 首先,打印属性名称 */ nFields = UXSQLnfields(res); for (i = 0; i < nFields; i++) printf("%-15s", UXSQLfname(res, i)); printf("\n\n"); /* 然后打印行 */ for (i = 0; i < UXSQLntuples(res); i++) { for (j = 0; j < nFields; j++) printf("%-15s", UXSQLgetvalue(res, i, j)); printf("\n"); } UXSQLclear(res); /* 关闭入口 ... 我们不用检查错误 ... */ res = UXSQLexec(conn, "CLOSE myportal"); UXSQLclear(res); /* 结束事务 */ res = UXSQLexec(conn, "END"); UXSQLclear(res); /* 关闭数据库连接并清理 */ UXSQLfinish(conn); return 0; } -
根据UXDB服务端的安装目录指定项目头文件和链接库文件目录。
右键“项目”=>“属性”=>“配置属性”=>“VC++目录”,分别选择包含目录和库目录,进行编辑,分别添加uxdb\dbsql下的include目录和lib目录(编辑目录时勾选从父级或项目默认设置继承,目录根据实际路径编辑)。


-
右键“项目”=>“属性”=>“配置属性”=>“链接器”=>“输入”,编辑附加依赖项,输入libuxsql.lib,单击确定。

-
右键“项目”=>“属性”=>“配置管理器”,配置选择Debug,平台选择x64,单击确定。

-
右键“项目”=>“添加”=>“现有项”,添加“ssleay32.dll”、“_int.dll”、“libeay32.dll”、“libuxsql.dll”到创建的项目文件夹下,根据实际路径添加。

-
将uxdb\dbsql\bin目录添加到系统环境变量Path中。

提示
如果执行过程中有关于缺少某个dll文件的报错,需要根据实际情况将文件所在的目录添加到系统环境变量Path中。
-
右键“项目”=>“生成”,成功之后,进行刷新,也可以使用快捷键Ctrl+F5。
5.运行结果
![]() |
![]() |
重要
-
头文件和libuxsql连接依赖于Windows服务端的安装,主要是include和lib子目录下的头文件和DLL库。
-
连接字符串:host=192.168.1.82 port=5432 dbname=uxdb user=uxdb password=123456。

