MySQL Connector/C は通常 MySQL C API と呼ばれ、C 言語の関数とデータ構造のセットを提供し、開発者が C/C++ 言語を使用して MySQL データベースに接続、クエリ、および管理できるようにします。この API により、開発者は C/C++ アプリケーション内で直接 MySQL データベースを使用できます。
本記事では、MySQL Connector/C (libmysqlclient) ドライバと OceanBase Cloud データベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実装する方法について説明します。
前提条件
MySQL Connector/C (libmysqlclient) をインストールして使用する前に、基本的なデータベース開発環境が設定されていることを確認してください。要件は以下の通りです。
- GCC バージョン 3.4.6 以降。バージョン 4.8.5 を推奨します。
- CMake バージョン 2.8.12 以降。
- OceanBase Cloud データベースのアカウントを登録し、クラスタインスタンスと MySQL互換モード のテナントを作成済みであること。詳細は クラスタインスタンスの作成 および テナントの作成 をご参照ください。
操作手順
- OceanBase 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: アカウントのパスワードを指定します。
例は以下の通りです:
```shell
obclient -h t********.********.oceanbase.cloud -P3306 -u mysql001 -p****** -Dtest
```
ステップ 2: MySQL Connector/C ドライバのインストール
```shell
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 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