このトピックでは、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 をインストールする必要があります。
LibOBClient をインストールします。
$ sudo rpm -ivh libobclient-xx.x86_64.rpmOBClient をインストールします。
$ sudo rpm -ivh obclient-xx.x86_64.rpm
ソースコードをコンパイルする
OceanBase データベースは、GitHub リポジトリに最新の のソースコードを提供しています。これには、サブリポジトリも含まれています。 OBClient その 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コードをコンパイルしてパッケージ化する
OBClient の ソースコード をダウンロードします。これには、サブリポジトリも含まれています。
$ git clone --recurse-submodules https://github.com/oceanbase/obclientobclient/libmariadb ディレクトリに移動します。
$ cd obclient/libmariadbLibOBClient をコンパイルします。
$ sh build.shLibOBClient の RPM パッケージをパッケージ化します。
$ sh rpm/libobclient-build.shOBClient ディレクトリに戻ります。
$ cd ..OBClient をコンパイルします。
$ sh build.shOBClient を RPM パッケージにパッケージ化します。
$ sh rpm/obclient-build.sh
LibOBClient をインストールします。
$ sudo rpm -ivh /libmariadb/rpmlibobclient-xx.x86_64.rpmOBClient をインストールします。
$ sudo rpm -ivh rpm/obclient-xx.x86_64.rpm説明OBClient は LibOBClient に依存しています。そのため、最初に LibOBClient をインストールする必要があります。
ステップ 3: サンプルコードを作成する
OceanBase Connector/C を使用して OceanBase サーバーノードと対話するには、次の手順を実行します。
呼び出し
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);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コードを編集した後、次のコマンドを実行してサンプルステートメントを実行します。
実行パスを指定します。
$ export LD_LIBRARY_PATH=/u01/obclient/libmysql_test を実行します。
$ ./mysql_test次の結果が返された場合、データベースは接続され、サンプルステートメントは正しく実行されています。
--------------------- id name --------------------- 20 hangzhou 20 shanghai ---------------------