本文提供 C 应用程序连接 OceanBase 数据库的连接代码示例。
前提条件
在安装使用 OceanBase Connector/C 前请确保设置了基本的数据库开发环境,要求如下:
GCC 版本为 3.4.6 及以上,推荐使用 4.8.5 版本。
CMake 版本为 2.8.12 及以上.
安装 C 驱动
Linux 安装
获取 OceanBase Connector/C 安装包(即 libobclient)和 obclient 安装包。
下载安装包,请参考 镜像站 ,根据自身的系统版本在镜像库中找到需要的安装包。
安装 libobclient。
sudo rpm -ivh libobclient-xx.x86_64.rpm安装 obclient。
sudo rpm -ivh obclient-xx.x86_64.rpm
>**说明** > >由于 obclient 依赖于 libobclient,所以需要先安装 libobclient。
### 从源代码编译
OceanBase 数据库的 Github 仓库提供的最新开发版本的源代码(包含子库 libobclient),参见 obclient。
安装依赖工具。
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代码编译及打包
下载 obclient 源代码(包含子库)。
git clone --recurse-submodules https://github.com/oceanbase/obclient #下载 obclient 源代码(包含子库) cd obclient执行 libobclient 编译。
cd obclient/libmariadb sh build.sh打包 libobclient 的 RPM 安装包。
cd rpm sh libobclient-build.sh执行 obclient 编译。
cd ../.. #回到 obclient 目录 sh build.sh打包 obclient 的 RPM 安装包。
cd rpm sh obclient-build.sh
安装 libobclient 和 obclient。
cd /obclient/libmariadb/rpm sudo rpm -ivh libobclient-xx.x86_64.rpm cd ../../rpm # obclient/rpm 目录 sudo rpm -ivh obclient-xx.x86_64.rpm说明
由于 obclient 依赖于 libobclient,所以需要先安装 libobclient。
操作示例
应用程序通过 OceanBase Connector/C 与数据库服务器 OBServer 交互的基本方式如下:
调用
mysql_library_init()初始化 MySQL 库。mysql_library_init(0, NULL, NULL);调用
mysql_init()初始化一个连接句柄。MYSQL *mysql = mysql_init(NULL);调用
mysql_real_connect()连接到 OBServer。mysql_real_connect (mysql, host_name, user_name, password, db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS)调用
mysql_real_query()或mysql_query()向 OBServer 发送 SQL 语句。mysql_query(mysql,"sql_statement");调用
mysql_store_result()或mysql_use_result()处理其结果。result=mysql_store_result(mysql);调用
mysql_free_result()释放内存。mysql_free_result(result);调用
mysql_close()关闭与 OBServer 的连接。mysql_close(mysql);调用
mysql_library_end()结束 libobclient 的使用。mysql_library_end();
示例代码
以 mysql_test.c 文件为例,代码如下:
#include "mysql.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
mysql_library_init(0, NULL, NULL);
MYSQL *mysql = mysql_init(NULL);
char* host_name = "172.xx.xx.xx";//set your mysql host
char* user_name = "r***"; //set your user_name
char* password = "***1**"; //set your password
char* db_name = "test"; //set your databasename
int port_num = 2883; //set your mysql port
char* socket_name = NULL;
MYSQL_RES* result;
int status = 0;
/* connect to server with the CLIENT_MULTI_STATEMENTS option */
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);
exit(1);
}
/* execute multiple statements */
status = mysql_query(mysql,
"DROP TABLE IF EXISTS test_table;\
CREATE TABLE test_table(id INT);\
INSERT INTO test_table VALUES(10);\
UPDATE test_table SET id=20 WHERE id=10;\
SELECT * FROM test_table;\
DROP TABLE test_table");
if (status)
{
printf("Could not execute statement(s)");
mysql_close(mysql);
exit(0);
}
/* process each statement result */
do {
/* did current statement return data? */
result = mysql_store_result(mysql);
if (result)
{
/* yes; process rows and free the result set */
//process_result_set(mysql, result);
mysql_free_result(result);
}
else /* no result set or error */
{
if (mysql_field_count(mysql) == 0)
{
printf("%lld rows affected\n",
mysql_affected_rows(mysql));
}
else /* some error occurred */
{
printf("Could not retrieve result set\n");
break;
}
}
/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
if ((status = mysql_next_result(mysql)) > 0)
printf("Could not execute statement\n");
} while (status == 0);
mysql_close(mysql);
}
参数说明:
hostname:OceanBase 数据库连接 IP,通常是一个 OBProxy 地址。
username:租户的连接账户,MySQL 模式的租户管理员用户名默认是
root。password:用户密码。
dbname:需要访问的数据库名称。
port:OceanBase 数据库连接端口,也是 OBProxy 的监听端口,默认是 2883,可以自定义。
代码编辑完成后,可以通过如下命令进行编译和执行:
//编译
g++ -I/u01/obclient/include/ -L/u01/obclient/lib -lobclnt mysql_test.c -o mysql_test
//指定运行路径
export LD_LIBRARY_PATH=/u01/obclient/lib
//运行
./mysql_test
说明
obclient 安装的默认路径为
/u01/obclient。
相关内容
关于 OceanBase Connector/C 的详细安装和使用信息,请参考文档 《OceanBase Connector/C 开发者指南》。




