本日、MariaDB Connector /C++の一般提供を発表しました。 C ++言語は、その効率性、汎用性、および拡張性で知られています。実際、アプリケーションが予測可能な同時実行性と遅延を必要とするフィンテックやゲームなどの業界でよく使用されます。 MariaDB Connector / C ++を使用すると、開発者はアプリケーション内で新しいコネクタを使用して、オンプレミスのMariaDBサーバーとMariaDBSkySQLのクラウドにネイティブに接続できます。
この記事では、MariaDBに格納されているデータとの作成、読み取り、更新、削除(CRUD)の相互作用を示す簡単な例を使用して、MariaDB Connector /C++を紹介します。具体的には、タスクを管理するための簡単な操作を実行できるC++コンソールアプリケーションを作成するプロセスについて説明します。しかし、十分に話して、始めましょう!
ダウンロードとインストール
MariaDB Connector / C ++を使用するには、MariaDBサーバーのインスタンスにアクセスできる必要があります。ローカルマシン、オンプレミス、さらにはクラウドでMariaDBを使い始めるにはさまざまな方法があります。
- MariaDBCommunityServerをダウンロードしてインストールします
- 直接
- Dockerイメージの使用
- MariaDBEnterpriseServerをダウンロードしてインストールします
- 究極のMariaDBクラウドデータベースであるMariaDBSkySQLを使用してデプロイする
MariaDBサーバーインスタンスをセットアップした後、MariaDBコネクタ/ C ++をダウンロードしてインストールする方法については、MariaDBEnterpriseのドキュメントに記載されている手順に従うことができます。
MariaDBサーバーの準備
この例では、新しいMariaDB C ++コネクタを使用する前に、データベースとテーブルが必要です。選択したクライアントを使用して、MariaDBデータベースインスタンスに接続し、次のことを行います。
1.新しいデータベースとタスクレコードの保存を担当する単一のテーブルを作成します。
CREATE DATABASE IF NOT EXISTS todo; CREATE TABLE todo.tasks ( id INT(11) unsigned NOT NULL AUTO_INCREMENT, description VARCHAR(500) NOT NULL, completed BOOLEAN NOT NULL DEFAULT 0, PRIMARY KEY (id) );
2. Connector /C++がMariaDBへの接続に使用する新しいデータベースユーザーを作成します。
CREATE USER IF NOT EXISTS app_user@localhost IDENTIFIED BY 'Password123!'; GRANT ALL PRIVILEGES ON todo.* TO app_user@localhost;
MariaDBサーバーへの接続
データベースインスタンス、スキーマ、およびユーザーを設定したので、C++にジャンプします。それはすべて、MariaDBへの接続を確立することから始まります。もちろん、これを行うには、C++コードを追加するファイルの先頭にMariaDBコネクタヘッダーファイル、具体的にはconncpp.hppをインクルードする必要があります。
#include <mariadb/conncpp.hpp>
接続を確立するには、まずDriver
を取得します 次に、Java Database Connectivity(JDBC)構成情報と組み合わせて使用して、Connection
を取得できるオブジェクト。 オブジェクト。
// Instantiate Driver sql::Driver* driver = sql::mariadb::get_driver_instance(); // Configure Connection sql::SQLString url("jdbc:mariadb://localhost:3306/todo"); sql::Properties properties({{"user", "app_user"}, {"password", "Password123!"}}); // Establish Connection std::unique_ptr<sql::Connection> conn(driver->connect(url, properties));
MariaDBのConnector/C ++の接続機能の詳細については、公式のエンタープライズドキュメントを確認してください。
タスクの追加
Connection
を取得したら オブジェクト、あなたはレースに出かけています! connを使用すると、前のセクションから、プリペアドステートメントを使用してSQLを実行し、MariaDBにデータを挿入できるようになりました。
// Create a new PreparedStatement std::unique_ptr<sql::PreparedStatement> stmnt(conn->prepareStatement("insert into tasks (description) values (?)")); // Bind values to SQL statement stmnt->setString(1, description); // Execute query stmnt->executeQuery();を実行します
タスクの取得
前のセクションと非常によく似たアプローチを使用して、Statement
を作成することもできます。 タスクテーブル内のすべてのタスクレコードを取得して印刷するオブジェクト。
// Create a new Statement std::unique_ptr stmnt(conn->createStatement()); // Execute query sql::ResultSet *res = stmnt->executeQuery("select * from tasks"); // Loop through and print results while (res->next()) { std::cout << "id = " << res->getInt(1); std::cout << ", description = " << res->getString(2); std::cout << ", completed = " << res->getBoolean(3) << "\n"; }
タスクの更新
PreparedStatement
を使用することもできます パラメータ(および値)を指定して、既存のタスクレコードを見つけて変更します。
// Create a new PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("update tasks set completed = ? where id = ?")); // Bind values to SQL statement stmnt->setBoolean(1, completed); stmnt->setInt(2, id); // Execute query stmnt->executeQuery();を実行します
タスクの削除
もちろん、DELETE SQL
を使用して、MariaDBからデータを削除することもできます。 PreparedStatement
を含むステートメント 、特定のレコードをターゲットにします。
// Create a new PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id = ?")); // Bind values to SQL statement stmnt->setInt(1, id); // Execute query stmnt->executeQuery();
すべてをまとめる
最後に、以下のコードをコピーして tasks.cpp という新しいファイルに貼り付けることで、すべてを1つの自己完結型の例にまとめることができます。 。以下のサンプルは、私が行ったすべてのCRUD操作を、メインから実行できる関数のコレクションにまとめたものです。 メソッド。
#include <iostream> #include <cstring> #include <mariadb/conncpp.hpp> // Delete a task record (indicated by id) void deleteTask(std::unique_ptr &conn, int id) { try { // Create a new PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id = ?")); // Bind values to SQL statement stmnt->setInt(1, id); // Execute query stmnt->executeQuery(); } catch(sql::SQLException& e){ std::cerr << "Error deleting task: " << e.what() << std::endl; } } // Update the completed value of a task record (indicated by id) void updateTaskStatus(std::unique_ptr &conn, int id, bool completed) { try { // Create a new PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("update tasks set completed = ? where id = ?")); // Bind values to SQL statement stmnt->setBoolean(1, completed); stmnt->setInt(2, id); // Execute query stmnt->executeQuery(); } catch(sql::SQLException& e){ std::cerr << "Error updating task status: " << e.what() << std::endl; } } // Create a new task record void addTask(std::unique_ptr &conn, std::string description) { try { // Create a new PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values (?)")); // Bind values to SQL statement stmnt->setString(1, description); // Execute query stmnt->executeQuery(); } catch(sql::SQLException& e){ std::cerr << "Error inserting new task: " << e.what() << std::endl; } } // Print all records in tasks table void showTasks(std::unique_ptr &conn) { try { // Create a new Statement std::unique_ptr stmnt(conn->createStatement()); // Execute query sql::ResultSet *res = stmnt->executeQuery("select * from tasks"); // Loop through and print results while (res->next()) { std::cout << "id = " << res->getInt(1); std::cout << ", description = " << res->getString(2); std::cout << ", completed = " << res->getBoolean(3) << "\n"; } } catch(sql::SQLException& e){ std::cerr << "Error selecting tasks: " << e.what() << std::endl; } } // Main Process int main(int argc, char **argv){ if (argc==1){ std::cout << "Please provide an argument.\n"; } else { try { // Instantiate Driver sql::Driver* driver = sql::mariadb::get_driver_instance(); // Configure Connection sql::SQLString url("jdbc:mariadb://localhost:3306/todo"); sql::Properties properties({{"user", "app_user"}, {"password", "Password123!"}}); // Establish Connection std::unique_ptr conn(driver->connect(url, properties)); // Use arguments to determine execution next steps if (!strcmp(argv[1],"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1],"addTask")) { if (argc != 3) { std::cout << "Invalid arguments"; return 1; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],"updateTaskStatus")) { if (argc != 4) { std::cout << "Invalid arguments"; return 1; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc != 3) { std::cout << "Invalid arguments"; return 1; } deleteTask(conn, atoi(argv[2])); } // Close Connection conn->close(); } catch(sql::SQLException& e){ std::cerr << "Error Connecting to MariaDB Platform: " << e.what() << std::endl; // Exit (Failed) return 1; } } // Exit (Success) return 0; }
このサンプルアプリケーションの完全なソースは、ここにもあります。このC++の例のソースは、「TODO」と呼ばれるアプリケーションのリポジトリに含まれています。このリポジトリには、Webフロントエンドと多数の言語にまたがる他のいくつかのMariaDBコネクタ統合サンプルアプリケーションも含まれています。
アプリケーションの実行
Linux環境内で、 tasks.cppを作成した後 、C ++コンパイラを使用して、タスクと呼ばれる実行可能ファイルを作成できます。
$ g++ -o tasks tasks.cpp -std=c++11 -lmariadbcpp
実行可能ファイルを使用して、CRUD操作をテストするためのさまざまな引数値を指定できます。
- 説明用の値を指定して、新しいタスクレコードを挿入します。
./tasks addTask ‘A New Task’
- すべてのタスクレコードを印刷します。
./tasks showTasks
- タスクレコードの完了値を更新します。 idとcompletedの値を指定するだけです。
./tasks updateTaskStatus 1 1
- id値を指定してタスクレコードを削除します。
./tasks deleteTask 1
ほんの始まり
うまくいけば、MariaDBでC++の使用を開始するのがいかに簡単であるかを見て楽しんだことでしょう。これはMariaDBを使用したC++プログラミングの優れた入門書ですが、私たちは可能なことのほんの一部を始めたばかりです!
MariaDB Connector / C ++をさらに深く掘り下げたいですか?新しいC++コネクタの詳細や、その他の多くのMariaDBの機能については、MariaDBDeveloperHubを確認してください。
MariaDBコネクタ/C++エンタープライズドキュメントを検索します。