OceanBase Connector/C 为基于 C 开发的应用程序提供与 OceanBase 数据库的连接。本文主要介绍该连接方式的前提条件和操作步骤。
在安装使用 OceanBase Connector/C 前请确保设置了基本的数据库开发环境,要求如下:
GCC 版本为 3.4.6 及以上,推荐使用 4.8.5 版本。
CMake 版本为 2.8.12 及以上。
请联系技术支持人员获取 OceanBase Connector/C 安装包即
libobclient。
安装
libobclient。
sudo rpm -ivh libobclient-xx.x86_64.rpm
安装
obclient。
sudo rpm -ivh obclient-xx.x86_64.rpm
说明
由于
obclient依赖于libobclient,所以需要先安装libobclient。
OceanBase Connector/C 的 Github 仓库提供最新开发版本的源代码。
安装依赖工具。
sudo yum install -y git cmake gcc make openssl-devel ncurses-devel rpm-build gcc-c++ bison bison-devel zlib-devel gnutls-devel libxml2-devel openssl-devel \ libevent-devel libaio-devel
从 github 下载 obclient 和 libobclient(即 OceanBase Connector/C)源代码,地址如下:
obclient:
https://github.com/oceanbase/obclient
libobclient:
https://github.com/oceanbase/obconnector-c
执行编译脚本编译源代码,编译该代码会下载子 Module 和 OceanBase Connector/C 的代码。
sh build.sh #编译代码
打包
libobclient 的 RPM 安装包(包含 so 和头文件)。
cd libmariadb/rpm #进入 libobclient 的打包目录 sh libobclient-build.sh #打包 libobclient 安装包
打包
obclient 的 RPM 包。
cd ../../rpm #进入到 obclient 的打包目录 sh obclient-build.sh #打包 obclient 安装包
安装
libobclient。
sudo rpm -ivh libobclient-xx.x86_64.rpm
安装
obclient。
sudo rpm -ivh obclient-xx.x86_64.rpm
说明
由于
obclient依赖于libobclient,所以需要先安装libobclient。
完整的基础运行示例如下:
mysql_library_init(0, NULL, NULL);
MYSQL *mysql = mysql_init(NULL);
/* 使用 CLIENT_MULTI_STATEMENTS 选项连接服务器 */
if (mysql_real_connect (mysql, host_name, user_name, password,
db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS) == NULL)
{
printf("mysql_real_connect() failed\n");
mysql_close(mysql);
mysql_library_end();
exit(1);
}
/*执行多条语句 */
status = mysql_query(mysql,
"DROP TABLE IF EXISTS tbl1;\
CREATE TABLE tbl1(id INT);\
INSERT INTO tbl1 VALUES(110);\
UPDATE tbl1 SET id=120 WHERE id=110;\
SELECT * FROM tbl1;\
DROP TABLE tbl1");
if (status)
{
printf("Could not execute statement(s)");
mysql_close(mysql);
mysql_library_end();
exit(0);
}
/* 处理每个语句的结果 */
do {
/* 当前语句是否返回数据? */
result = mysql_store_result(mysql);
if (result)
{
/* 是的; 则处理行并释放结果集 */
process_result_set(mysql, result);
mysql_free_result(result);
}
else /* 没有结果集或报错 */
{
if (mysql_field_count(mysql) == 0)
{
printf("%lld rows affected\n",
mysql_affected_rows(mysql));
}
else /* 发生报错 */
{
printf("Could not retrieve result set\n");
break;
}
}
/* 判断是否有更多结果? -1 表示否,大于 0 表示报错,等于 0 表示是(即继续循环)*/
if ((status = mysql_next_result(mysql)) > 0)
printf("Could not execute statement\n");
} while (status == 0);
mysql_close(mysql);
mysql_library_end();
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026075/viewspace-2932337/ ,如需转载,请注明出处,否则将追究法律责任。