C 应用程序连接 OceanBase 数据库

OceanBase Connector/C 为基于 C 开发的应用程序提供与 OceanBase 数据库的连接。本文主要介绍该连接方式的前提条件和操作步骤。

前提条件

  • 在安装使用 OceanBase Connector/C 前请确保设置了基本的数据库开发环境,要求如下:

    • GCC 版本为 3.4.6 及以上,推荐使用 4.8.5 版本。

    • CMake 版本为 2.8.12 及以上

  • 请联系技术支持人员获取 OceanBase Connector/C 安装包即 libobclient

Linux 安装

  1. 安装 libobclient

    sudo rpm -ivh libobclient-xx.x86_64.rpm
  2. 安装 obclient

    sudo rpm -ivh obclient-xx.x86_64.rpm
    说明

    由于 obclient 依赖于 libobclient,所以需要先安装 libobclient

从源代码编译

OceanBase Connector/C 的 Github 仓库提供开发版本的源代码。从源代码编译的步骤如下:

  1. 安装依赖工具。

    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
  2. 从 github 下载 obclientlibobclient(即 OceanBase Connector/C)源代码,地址如下:

  3. 执行编译脚本编译源代码,编译该代码会下载子 Module 和 OceanBase Connector/C 的代码。

    sh build.sh 
  4. 打包 libobclient 的 RPM 安装包(包含 so 和头文件)。

    cd libmariadb/rpm   #进入 libobclient 的打包目录
    sh libobclient-build.sh   #打包 libobclient 安装包
  5. 打包 obclient 的 RPM 包。

    cd ../../rpm      #进入到 obclient 的打包目录
    sh obclient-build.sh    #打包 obclient 安装包
  6. 安装 libobclient

    sudo rpm -ivh libobclient-xx.x86_64.rpm
  7. 安装 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();

关于 OceanBase Connector/C 的详细使用信息,请参考文档 OceanBase Connector/C 开发者指南

阿里云首页 云数据库 OceanBase 相关技术圈