MySQL Connector/C は通常 MySQL C API と呼ばれ、C 言語の関数とデータ構造のセットを提供し、開発者が C/C++ 言語を使用して MySQL データベースに接続、クエリ、管理できるようにします。この API により、開発者は C/C++ アプリケーション内で直接 MySQL データベースを利用できます。
本記事では、MySQL Connector/C (libmysqlclient) ドライバーと OB Cloud クラウドデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実現する方法を紹介します。
前提条件
MySQL Connector/C (libmysqlclient) のインストールと使用を開始する前に、基本的なデータベース開発環境が設定されていることを確認してください。要件は以下の通りです:
- GCCバージョンが3.4.6以上であること。4.8.5バージョンの使用を推奨します。
- CMakeバージョンが2.8.12以上であること。
- OB Cloudデータベースアカウントに登録済みであり、クラスタインスタンスとMySQL互換モードのテナントを作成していること。詳細については、クラスタインスタンスの作成およびテナントの作成を参照してください。
手順
- OB Cloudデータベース接続情報を取得します。
- MySQL Connector/Cドライバーをインストールします。
- アプリケーションを作成します。
- アプリケーションを実行します。
ステップ1:データベース接続文字列を取得する
OceanBase Cloudコンソールにログインします。インスタンスリストページで、対象インスタンスの情報を展開し、対象テナントの下で、接続 > 接続文字列の取得 を選択します。
詳細な操作については、接続文字列の取得を参照してください。
作成済みのOceanBase Cloudデータベースに基づいて、以下のURLの該当する情報を入力します。
obclient -h$host -P$port -u$user_name -p$password -D$database_nameパラメータ説明:
$host:OceanBase Cloudデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OceanBase Cloudデータベースの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベース名を指定します。注意
テナントに接続するユーザーは、データベースに対する
CREATE、INSERT、DROP、およびSELECT権限が付与されていなければなりません。アカウント権限の詳細については、アカウントの作成と管理を参照してください。$user_name:データベースにアクセスするアカウントを指定します。$password:アカウントのパスワードを指定します。
例:
obclient -h t********.********.oceanbase.cloud -P3306 -u 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:OB Cloudデータベース接続情報を取得する で取得した情報に基づいて、プロジェクトファイル test.cc 内のデータベース接続情報を修正します。
- Linux環境では、
vi test.ccまたはvim test.ccコマンドを使用してtest.ccファイルを編集し、ファイル内のデータベース接続情報を実際の状況に合わせて修正します。
test.cc ファイル内のデータベース接続情報例:
# この部分の接続情報は、取得した接続文字列の実際の情報に変更する必要があります。例は以下のとおりです
if (mysql_real_connect(conn, "t********.********.oceanbase.cloud", "mysql001", "********", "test", 3306, 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