すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase:OceanBase Connector/C を使用して OceanBase データベースに接続する

最終更新日:Jan 19, 2025

このトピックでは、OceanBase Connector/C を使用して OceanBase データベースに接続し、使用する方法について説明します。

前提条件

OceanBase Connector/C をインストールする前に、次の要件を満たす基本的なデータベース開発環境をセットアップしていることを確認してください。

  • GNU Compiler Collection(GCC)のバージョンが 3.4.6 以降であること。バージョン 4.8.5 を推奨します。

  • CMake のバージョンが 2.8.12 以降であること。

OceanBase Connector/C を使用して OceanBase データベースに接続する

ステップ 1: データベース接続パラメーターを取得する

データベース接続パラメーターを取得します。詳細については、「接続パラメーターを取得する」をご参照ください。例:

$ obclient -hxxx.xxx.xxx.xxx -P3306 -u a**** -p****** -Dtest

データベース接続パラメーターは、データベースへのアクセスに必要な情報を指定します。サンプルコードで使用する前に、データベースにログオンしてデータベース接続パラメーターを確認できます。

オプション:

  • -h: 接続先の OceanBase データベースのドメイン名。

  • -P: OceanBase データベースに接続するためのポート。デフォルトでは、MySQL モードではポートは 3306 です。

  • -u: テナントアカウント。

  • -p: アカウントパスワード。

  • -D: データベース名。

ステップ 2: OceanBase Connector/C をインストールする

RPM パッケージを使用する

のインストール パッケージを取得します OceanBase Connector/C(LibOBClient とも呼ばれます) と OBClient。その他のバージョンのインストール パッケージについては、Alibaba Cloud のオープンソース イメージ サイト。必要なインストール パッケージは、お使いのシステム バージョンのイメージ リポジトリにあります。

説明

OBClient は LibOBClient に依存しています。そのため、最初に LibOBClient をインストールする必要があります。

  1. LibOBClient をインストールします。

    $ sudo rpm -ivh libobclient-xx.x86_64.rpm
  2. OBClient をインストールします。

    $ sudo rpm -ivh obclient-xx.x86_64.rpm

ソースコードをコンパイルする

OceanBase データベースは、GitHub リポジトリに最新の のソースコードを提供しています。これには、サブリポジトリも含まれています。 OBClient その 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. コードをコンパイルしてパッケージ化する

    1. OBClient の ソースコード をダウンロードします。これには、サブリポジトリも含まれています。

      $ git clone --recurse-submodules https://github.com/oceanbase/obclient 
    2. obclient/libmariadb ディレクトリに移動します。

      $ cd obclient/libmariadb
    3. LibOBClient をコンパイルします。

      $ sh build.sh
    4. LibOBClient の RPM パッケージをパッケージ化します。

      $ sh rpm/libobclient-build.sh
    5. OBClient ディレクトリに戻ります。

      $ cd ..
    6. OBClient をコンパイルします。

      $ sh build.sh
    7. OBClient を RPM パッケージにパッケージ化します。

      $ sh rpm/obclient-build.sh
  3. LibOBClient をインストールします。

    $ sudo rpm -ivh /libmariadb/rpmlibobclient-xx.x86_64.rpm

    OBClient をインストールします。

    $ sudo rpm -ivh rpm/obclient-xx.x86_64.rpm
    説明

    OBClient は LibOBClient に依存しています。そのため、最初に LibOBClient をインストールする必要があります。

ステップ 3: サンプルコードを作成する

OceanBase Connector/C を使用して OceanBase サーバーノードと対話するには、次の手順を実行します。

  1. 呼び出し mysql_library_init() MySQL ライブラリを初期化するためです。

    mysql_library_init(0, NULL, NULL);
  2. 呼び出し mysql_init() 接続ハンドルを初期化するため。

    MYSQL *mysql = mysql_init(NULL);
  3. 呼び出し mysql_real_connect() OBServer ノードに接続するためです。

    mysql_real_connect (mysql, host_name, user_name, password,
    db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS)
  4. 呼び出し mysql_real_query() または mysql_query() OBServer ノードに SQL 文を送信します。

    mysql_query(mysql,"sql_statement");
  5. 呼び出し mysql_store_result() または mysql_use_result() 結果を処理するためです。

    result=mysql_store_result(mysql);
  6. 呼び出し mysql_free_result() メモリ領域を解放します。

    mysql_free_result(result);
  7. 呼び出し mysql_close() OBServer ノードから切断します。

    mysql_close(mysql);
  8. LibOBClient の使用を停止するには、mysql_library_end() を呼び出します。

    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 = "xxx.xxx.xxx.xxx";//set your mysql host
  char* user_name = "a****"; //set your user_name
  char* password = "******"; //set your password
  char* db_name = "test"; // Set your database name.
  int port_num = 3306; //set your mysql port
  char* socket_name = NULL;
  MYSQL_RES* result;
  MYSQL_FIELD* fields;
  MYSQL_ROW row;
  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;");
                      
  if (status)
  {
    printf("Could not execute statement(s)");
    mysql_close(mysql);
    exit(0);
  }

  status = mysql_query(mysql, "CREATE TABLE test_table(id INT,name varchar(24));");
  status = mysql_query(mysql, "INSERT INTO test_table VALUES(10,'hangzhou'),(20,'shanghai');");
  status = mysql_query(mysql, "UPDATE test_table SET id=20 WHERE id=10;");
  status = mysql_query(mysql, "SELECT * FROM test_table;");

  /* 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);

    int num_fields = mysql_num_fields(result);
    int num_rows = mysql_num_rows(result);

    printf("result: %d rows %d fields\n", num_rows, num_fields);
    printf("---------------------\n");

    fields = mysql_fetch_fields(rs_metadata);

    for (int i = 0; i < num_fields; ++i)
    {
      printf("%s\t", fields[i].name);
    }

    printf("\n---------------------\n");

    while ((row = mysql_fetch_row(result)))
    {
      for (int i = 0; i < num_fields; ++i)
      {
        printf("%s\t", row[i] ? row[i] : "NULL");
      }

      printf("\n");
    }

    printf("---------------------\n");

    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");
     }
  }
  
  status = mysql_query(mysql, "DROP TABLE test_table;");

  mysql_close(mysql);
  return 0;
}

コード内のデータベース接続パラメーターを変更します。次のパラメーターと形式を参照してください。パラメーター値はステップ 1 で取得します。

  • host_name: 接続先の OceanBase データベースのドメイン名。 オプションに対応します。 -h オプション

  • user_name: テナントアカウント。これは、 -u オプション

  • password: テナントアカウントのパスワード。 オプションに対応します。 -p オプション。

  • db_name: データベース名。 オプションに対応します。 -D オプション。

  • port_num: OceanBase データベースに接続するためのポートです。これは、-P オプションに対応します。デフォルトでは、MySQL モードの場合、ポートは 3306 です。

ステップ 4: サンプルコードを実行する

コードを編集した後、次のコマンドを実行してコンパイルします。

説明

OBClient のデフォルトのインストール パスは /u01/obclient です。

$ g++ -I/u01/obclient/include/ -L/u01/obclient/lib -lobclnt mysql_test.c -o mysql_test

コードを編集した後、次のコマンドを実行してサンプルステートメントを実行します。

  1. 実行パスを指定します。

    $ export LD_LIBRARY_PATH=/u01/obclient/lib
  2. mysql_test を実行します。

    $ ./mysql_test
  3. 次の結果が返された場合、データベースは接続され、サンプルステートメントは正しく実行されています。

    ---------------------
    id      name
    ---------------------
    20      hangzhou
    20      shanghai
    ---------------------