本章通过一个简单的案例来介绍C & C++客户端程序通过libuxsql库访问UXDB实例的方法和步骤。
开发环境
这里的开发环境是指C & C++客户端的开发环境, 对数据库服务端的运行环境不做要求。
OS:Windows10 X64
tool chain:VS2010 & SP1
启动服务
Database server运行在linux环境下, 数据库集群testlocal连接信息:
IP:192.168.1.82
端口:5432
用户/口令:uxdb/123456
连接案例
在VS2010中新建“Win32控制台应用程序”, 附加选项选择“空项目”。文件-->新建项目-->Visual C++ -->Win32 控制台应用程序,自定义名称(eg:testc),点击确定,点击下一步,附加选项中选择空项目,点击完成。
右键源文件-->添加-->新建项-->C++文件(.cpp),名称自定义输入(eg: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。
运行结果
重要说明
头文件和libuxsql连接依赖于Windows服务端的安装, 主要是include和lib子目录下的头文件和DLL库;
连接字符串:host=192.168.1.82 port=5432 dbname=uxdb user=uxdb password=123456