C++ を使用して MySQL に接続する方法

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。

MySQLCon クラスの定義

クラス MySQLCon
{
 MYSQLmysql;
公共:
 int エラー番号;
 文字列エラーテキスト;
公共:
 //MySQLCon() を初期化します。
 //データベースを閉じます~MySQLCon();
 //データベースに接続します bool OpenConn(const char* host,const char* username,const char* pwd,const char* dbName,unsigned port=0);
 void GetErrorText();//エラー テキストを取得します void Close();//データベースを閉じます bool ExecuteSQL(const char* sql);//SQL ステートメントを使用しますが、データを受信できません bool QureySQL(const char* sql, vector<vector<string>>& resultSet);//SQL ステートメントを使用してデータを受信します (select ステートメント)
};

初期化操作

MySQLCon::MySQLCon()
{
 (mysql_library_init(0, nullptr, nullptr) の場合) 
 {
 cout << "CAPI の初期化に失敗しました" << std::endl;
 getchar();
 終了(1);
 }
 (mysql_init(&mysql)==nullptr)の場合
 {
 cout << "データベース変数の初期化に失敗しました" << std::endl;
 char を取得する
 終了(1);
 }
 if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"))
 {
 cout << "接続オプションの設定に失敗しました" << std::endl;
 char を取得する
 終了(1);
 }
}

MySQLサーバーへの接続

//パラメータは、ホスト、ユーザー名、パスワード、データベース名、ポート番号です。bool MySQLCon::OpenConn(const char* host, const char* username, const char* pwd, const char* dbName, unsigned port)
{
 //データベースに接続する if (mysql_real_connect(&mysql, host, username, pwd, dbName, port, nullptr, 0)==nullptr)
 {
 cout << "MySQL サーバーへの接続に失敗しました" << std::endl;
 //エラーテキストを取得します。GetErrorText();
 終了(1);
 false を返します。
 }
 true を返します。
 
}

MySQLエラー情報を取得する

void MySQLCon::GetErrorText()
{
 //エラーコードを取得します errornum = mysql_errno(&mysql);
 //エラーテキストを取得します。errortext = mysql_error(&mysql);
 //エラー コードを出力します cout << "error num: " << errornum << std::endl;
 //エラーテキストを出力 cout << "error text: " << errortext << std::endl;
 getchar();
}

C++ での SQL ステートメントの使用

ブールMySQLCon::ExecuteSQL(const char* sql)
{
 //SQL ステートメントを使用しますが、データを受け取ることができません if (mysql_real_query(&mysql, sql, strlen(sql)))
 {
 エラーテキストを取得します。
 false を返します。
 }
 true を返します。
}
bool MySQLCon::QureySQL(const char* sql、ベクトル<ベクトル<文字列>>&結果セット)
{
 //SQL ステートメントを使用して、データをベクター コンテナーに受信します if (mysql_real_query(&mysql, sql, strlen(sql)))
 {
 エラーテキストを取得します。
 false を返します。
 }
 //MYSQL 結果セットを作成します MYSQL_RES* result = mysql_store_result(&mysql);
 //行と列の合計数を取得します unsigned int rows = mysql_num_rows(result);
 符号なし整数列 = mysql_num_fields(結果);
 // 結果セット MYSQL_ROW 行にデータの一部を記録するために使用されます。
 while (行 = mysql_fetch_row(結果))
 {
 // 行にデータを格納するためのベクター コンテナーを作成します。vector<string> lineDate;
 (int i = 0; i < cols; i++) の場合
 {
 if (行[i])
 {
 //行の各列のデータをlineDateに保存します。lineDate.push_back(row[i]);
 }
 それ以外
 {
 lineDate.push_back("");
 }
 }
 // データの行全体を resultSet に保存します resultSet.push_back(lineDate);
 }
 //結果セットを解放するmysql_free_result(result);
 true を返します。
}

データベースを閉じる

void MySQLCon::Close()
{
 mysql_close(&mysql);
}
MySQLCon::~MySQLCon()
{
 近い();
 mysql_library_end();
}

メイン関数の例

int メイン()
{
 MySQLCon c_apiconn;
 c_apiconn.OpenConn("127.0.0.1", "ルート", "136119", "ファンシー");
 文字列 sql = "use fancy;"
 ベクトル<ベクトル<文字列>> データ;
 c_apiconn.SQL を実行します (sql.c_str());
 sql = "fancy.infoから*を選択します;";
 c_apiconn.QureySQL(sql.c_str(), データ);
 (int i = 0; i < data.size(); i++) の場合
 {
 (int j = 0; j < data[i].size(); j++)の場合
 {
 cout << データ[i][j] << "\t";
 }
 cout << 終了;
 }
 0を返します。
}

出力

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • C++ で MySQL データベースに接続する 2 つの方法の概要
  • Eclipse の C++ で MySQL データベースに接続する
  • C++ が MySQL-Connector/C++ を使用して MySQL に接続するときに発生する LNK2019 エラーの解決方法
  • MySql データベースに接続するための C/C++ メソッド
  • C++ で MySQL に接続する方法 (C-API を直接呼び出す)
  • MySQL API を使用して C++ でデータベースに接続および操作する例の詳細な説明
  • C++ を MySQL 5.6 に接続する際のエラーの概要
  • C++ を MySQL に接続する際に発生する問題の概要
  • C++はデータベースに接続するためにmysql独自のヘッダーファイルを使用します
  • C++ で MySQL データベースに接続する 2 つの方法 (ADO 接続と MySQL API 接続)

<<:  CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

>>:  22 Vue 最適化のヒント (プロジェクトの実践)

推薦する

ウェブフロントエンド開発の細部

1 選択タグは閉じられている必要があります <select></select>...

React forwardRefの使い方と注意点

これまで react.forwardRef は react の高階コンポーネントには適用できませんで...

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

Linux で MySQL のスケジュールバックアップを実装する方法

実際のプロジェクトでは、緊急事態を防ぐためにデータベースを頻繁にバックアップする必要があります。しば...

HTMLにビデオを挿入してすべてのブラウザと互換性を持たせる方法

HTML にビデオを挿入するために最もよく使用される方法は 2 つあります。1 つは古い <o...

JavaScriptエンジンV8の実行プロセスの詳細な説明

目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...

Amoeba を使用して MySQL データベースの読み取り/書き込み分離を実装する方法の詳細な説明

MySQL には読み取りと書き込みを分離するアーキテクチャが多数あります。Baidu のそれらのほと...

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...

nginxのアップストリーム設定と機能の詳細な説明

設定例 アップストリームバックエンド{ サーバー backend1.example.com 重み=5...

Reactのコンポーネント作成方法のまとめ

目次1. 関数を使用してコンポーネントを作成する2. クラスを使用してコンポーネントを作成する3. ...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

HTMLでアンカーの位置を設定するためのいくつかの一般的な方法

HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...

MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...