MySQL Connector/Cは通常MySQL C APIと呼ばれ、C言語の関数とデータ構造のセットを提供し、開発者はC/C++言語を使用してMySQLデータベースに対し、接続、クエリ、管理することができます。このAPIでは、開発者はC/C++アプリケーションから直接MySQLデータベースにアクセスすることもできます。
本記事では、MySQL Connector/C(libmysqlclient)ドライバーとOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、クエリなどの基本的な操作を実行する方法を紹介します。
前提条件
MySQL Connector/C(libmysqlclient)をインストールして使用する前に、基本的なデータベース開発環境が設定されていることを確認してください。要件は以下のとおりです:
- GCCのバージョンは3.4.6以上、推奨バージョンは4.8.5です。
- CMakeのバージョンは2.8.12以上です。
- OceanBaseデータベースがインストール済みで、MySQLモードのテナントが作成されていること。
操作手順
- OceanBaseデータベースの接続情報を取得します。
- MySQL Connector/Cドライバをインストールします。
- アプリケーションを作成します。
- アプリケーションを実行します。
ステップ1:データベース接続文字列の取得
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。例:
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータの説明:
$host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$database_name:アクセス対象のデータベース名。注意
テナントに接続するユーザーは、データベースに対する
CREATE、INSERT、DROP、およびSELECT権限が付与されていなければなりません。ユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
接続文字列の詳細については、OBClientによるOceanBaseテナントへの接続を参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:MySQL Connector/Cドライバーのインストール
## Ubuntuシステムの場合は、以下のコードを使用してインストールします:
sudo apt-get install libmysqlclient-dev
## CentOSシステムの場合は、以下のコードを使用してインストールします:
sudo yum install mysql-devel
## インストールが成功したかの確認
mysql_config --version
ステップ3:アプリケーションの作成
テキストエディタを開き、テキストエディタでサンプルファイル test.cc を編集、保存します。コードは次のとおりです:
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
int main() {
MYSQL *conn = mysql_init(NULL); // MySQL接続の初期化
if (conn == NULL) {
fprintf(stderr, "mysql_init() failed\n");
return 1;
}
// MySQLデータベースサーバーへの接続
if (mysql_real_connect(conn, "host", "user", "passwd", "db", port, NULL, 0) == NULL) {
fprintf(stderr, "mysql_real_connect() failed\n");
mysql_close(conn);
return 1;
}
// ユーザーテーブルの作成
if (mysql_query(conn, "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY(id))") != 0) {
fprintf(stderr, "Error in creating table: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// データの挿入
if (mysql_query(conn, "INSERT INTO users (name, email) VALUES ('小明', 'xiaoming@example.com')") != 0) {
fprintf(stderr, "Error in inserting data: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// データのクエリ
if (mysql_query(conn, "SELECT * FROM users") == 0) {
MYSQL_RES *result = mysql_store_result(conn);
if (result != NULL) {
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;
while ((row = mysql_fetch_row(result))) {
for (int i = 0; i < num_fields; i++) {
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(result);
} else {
fprintf(stderr, "Error in retrieving result: %s\n", mysql_error(conn));
}
} else {
fprintf(stderr, "Error in selecting data: %s\n", mysql_error(conn));
}
// テーブルの削除
if (mysql_query(conn, "DROP TABLE IF EXISTS users") != 0) {
fprintf(stderr, "Error in dropping table: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
mysql_close(conn); // 接続を閉じる
return 0;
}
ステップ1:OceanBaseデータベース接続情報を取得する に記載されている情報に基づいて、プロジェクトファイル test.cc 内のデータベース接続情報を修正します。
- Linux 環境の場合は、
vi test.ccまたはvim test.ccコマンドを使用してtest.ccファイルを編集し、ファイル内のデータベース接続情報を実際の状況に合わせて修正します。
test.cc ファイル内のデータベース接続情報例は次のとおりです:
# この部分の接続情報は、取得した接続文字列の実際の情報に変更する必要があります。例は以下のとおりです
if (mysql_real_connect(conn, "10.10.10.1", "test_user001@mysql001", "test", "db", 2881, NULL, 0) == NULL) {
fprintf(stderr, "mysql_real_connect() failed\n");
mysql_close(conn);
return 1;
}
ステップ4:アプリケーションのコンパイル
コードの編集が完了したら、以下のコマンドでコンパイルが可能になります。
gcc -o test test.cc `mysql_config --cflags --libs`
コンパイルに成功すると、実行ファイル test が生成されます。
ステップ5:アプリケーションの実行
以下のコマンドを使用して、アプリケーションを実行します。
./test
以下の結果が出力された場合は、データベースへの接続に成功し、サンプル文が正しく実行されたことを意味します。
1 小明 xiaoming@example.com