C++ で mysql データベースに接続してデータを読み取る方法
1. mysql API のヘッダー ファイルをインクルードする必要があります
ローカルの mysql データベースに接続する必要がある場合は、mysql がデータベースはローカルにインストールされている必要があります。ここでは、データベースへの接続、クエリ ステートメントの実行、その他の操作など、一部の mysql API が使用されています。これらのインターフェイスは、次のヘッダー ファイルに含まれています:
#include <mysql/mysql.h>
2. mysql に接続するための具体的な手順
ここでは、大きく 4 つの主要なステップに分けることができます:
1. mysql データベースに接続します
1. mysql データベースに接続します
明らかに、 mysql データ内のデータを取得するには、まずデータベースに接続し、データベースを操作できるハンドルを取得する必要があります。
2. クエリ ステートメントを実行します。つまり、必要なデータを選択します。
は、クエリ ステートメントを実行し、必要なデータをクエリします。クエリされたデータは結果セットと呼ばれる場所に保存されます。
3. 結果セットから必要なデータを取得する
関連するインターフェイス関数を使用して、結果セットから各行とローカル フィールドのデータを取得します。
4. 結果セットから各行の各フィールドの情報を抽出
5. 結果セットmysqlハンドルを含むリソースを解放
以下で詳しく説明します使用する必要のあるいくつかの主要なインターフェイス機能。
2.1 mysql_real_connect
この関数は、ホスト上で実行されているデータベース エンジンに接続するために使用されます。接続に成功するとデータベースを操作できるハンドルが取得され、失敗した場合は NULL ポインタが取得されます。返されます。
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag )
この関数には多くのパラメータがあり、各パラメータの意味は次のとおりです:
mysql: 既存のMYSQL 構造。 mysql_real_connect() を呼び出す前に、mysql_init() を呼び出して MYSQL 構造を初期化する必要があります。
#host: ホスト名または IP アドレスです。 「host」が NULL または文字列「localhost」の場合、接続は localhost への接続として扱われます。
#user: ユーザーの MySQL ログイン ID。 「user」が NULL または空の文字列「" の場合、そのユーザーは現在のユーザーとみなされます。
passwd: ユーザーのパスワード。 「passwd」が NULL の場合、ユーザーのユーザー テーブル内のエントリ (パスワード フィールドが空のもの) のみが一致するかどうかチェックされます。
db: データベース名です。 db が NULL の場合、接続によりデフォルトのデータベースがこの値に設定されます。
port: 「port」が 0 でない場合、その値が TCP/IP 接続のポート番号として使用されます。 「ホスト」パラメータによって接続のタイプが決定されることに注意してください。
unix_socket: unix_socket が NULL でない場合、この文字列は使用するソケットまたは名前付きパイプを記述します。 「ホスト」パラメータによって接続のタイプが決定されることに注意してください。
client_flag: 値は通常 0
2.2 mysql_query または mysql_real_query
この関数はused クエリ コマンドをデータベースに送信し、データベースに実行させます。 0 を返すとクエリが成功したことを示し、それ以外の場合は失敗します。
int mysql_query(MYSQL *mysql, const char *stmt_str)
Or:
int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
mysql: を通じて取得された mysql 操作ハンドルです。
stmt_str: 実行する必要があるクエリ ステートメントを示します。
#length: クエリ ステートメントの長さです。
上記 2 つの関数の違いは次のとおりです。
mysql_query() はバイナリ ステートメント、つまりパラメータ stmt_str の実行には使用できません。できません 文字に解析されるバイナリ データがあります。
mysql_query クエリ速度は、クエリ ステートメントの長さを計算する必要があるため、若干遅くなります。
2.3 結果セット mysql_store_result
を取得します。関数は、クエリが成功した場合は結果セットを返します。失敗した場合は、NULL を返します。
MYSQL_RES *mysql_store_result(MYSQL *mysql)
2.4 結果セット内のデータの各行を表示します。
次の入力パラメータこの関数は、ステップ (3) で返された結果セットです。呼び出されるたびに、結果セットの次のデータ行が返され、ポインタは 1 行後方に移動します。次のデータ行がない場合は、NULL が返されます。
mysql_num_fields(result) を使用して結果セット内の行数を計算し、mysql_num_fields(result) を使用して列数を計算できます。 rowが、ある行の情報であれば、row[0]、row[1]となります。 。 。行の各フィールド情報。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
3. プログラミングの例
ここでの環境は Linux システムです。使用されるローカル データベース名は CrashCourse、クエリ テーブル名は products です。次のプログラミング例は、products テーブル内の価格が 30 を超えるすべてのアイテムをクエリする方法を示しています。 products テーブルの完全な内容は次のとおりです:
#include#include <mysql/mysql.h> #include using namespace std; MYSQL mysql; //mysql连接 MYSQL_RES* res; //结果集结构体 MYSQL_ROW row; //char** 二维数组,存放记录 int main() { // 步骤1: 初始化并连接数据库,获得操作数据库的句柄 mysql_init(&mysql); //初始化 if (!(mysql_real_connect(&mysql, "localhost", "root", "root", "CrashCourse", 0, NULL, 0))) { cout << "Couldn't connect to Database!\n : " << mysql_error(&mysql); exit(1); } else { printf("Database connection succeeded. Connected...\n\n"); } // 步骤2: 执行查询语句,查询需要的数据(设置编码格式也相当于执行特殊的查询语句) mysql_query(&mysql, "set names gbk"); // 设置编码格式 mysql_query(&mysql, "SELECT * from products where prod_price > 30"); // 步骤3:获取结果集 res = mysql_store_result(&mysql); // 步骤4:显示结果集中每行数据 int cols = mysql_num_fields(res); // 计算结果集中,列的个数 while (row = mysql_fetch_row(res)) { for (int i = 0; i < cols; ++i) { cout << row[i] << "\t"; } cout << endl; } // 步骤5:释放结果集合mysql句柄 mysql_free_result(res); mysql_close(&mysql); return 0; }
クエリの結果は次のとおりです:
以上がC++ で mysql データベースに接続してデータを読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

todebugac applicationsinggdbinvisualstudiocode、configurethelaunch.jsonfilecorectly; keysettingsincludespecifiedtheexexecutable with "program"、「gdb」に「gdb」と「type」を「cppdbg」に設定し、「ex」を使用します

STD :: Mutexは、データ競争を防ぐために共有リソースを保護するために使用されます。この例では、STD :: lock_guardの自動ロックとロック解除を使用して、マルチスレッドの安全性を確保します。 1。STD:: MUTEXおよびSTD :: LOCK_GUARDを使用すると、ロックの手動管理によってもたらされる異常なリスクを回避できます。 2。マルチスレッドを変更する際には、カウンターなどの共有変数をMutexで保護する必要があります。 3.例外の安全性を確保するために、RAIIスタイルのロック管理をお勧めします。 4.固定順序でデッドロックと複数のロックを避けます。 5.共有リソースへのマルチスレッドアクセスのシナリオは、Mutex同期を使用する必要があり、最終プログラムは予想される10000および実際の出力を正しく出力します:10000。

大規模なテーブルを扱う場合、MySQLのパフォーマンスと保守性が課題に直面し、構造設計、インデックス最適化、テーブルサブテーブル戦略などから開始する必要があります。オーバーレイインデックスを使用して、クエリ効率を向上させます。スロークエリログを定期的に分析し、無効なインデックスを削除します。 2。パーティションテーブルの合理的な使用:クエリとメンテナンスの効率を改善するための時間範囲やその他の戦略に従ってパーティションをかけますが、分割と削減の問題に注意を払う必要があります。 3.分離とライブラリの分離の読み取りと書き込みを検討してください。ライブラリの分離とテーブルの分離は、大量のデータを備えたシナリオに適しています。ミドルウェアを使用して、トランザクションとクロスストアのクエリの問題を評価することをお勧めします。早期計画と継続的な最適化が重要です。

要素を削除するときに反復している場合は、故障したイテレーターの使用を避ける必要があります。正しい方法は、it = vec.erase(it)を使用し、earseによって返された有効なイテレーターを使用してトラバースを続けることです。 batchバッチ削除に推奨される「消去除去」イディオム:vec.erase(std :: remove_if(vec.begin()、vec.end()、条件)、vec.end())、安全で効率的です。 reverse逆イテレータを使用して背面から前面に削除できますが、ロジックは明確ですが、条件方向に注意を払う必要があります。結論:消去リターン値でイテレーターを常に更新し、障害のあるイテレーターの操作を禁止します。そうしないと、未定義の動作が生じます。

TagDispatchingは、タイプタグを使用して、コンピレーション期間中に最適な関数過負荷を選択して、効率的な多型を実現します。 1。STD:: ITERATOR_TRAITSを使用して、Iteratorカテゴリタグを取得します。 2。複数のdo_advance過負荷関数を定義し、それぞれRandom_access_iterator_tag、bidrectional_iterator_tag、input_iterator_tagを処理します。 3.主な関数MY_ADVANCEは、派生したタグタイプに基づいて対応するバージョンを呼び出して、コンパイル期間の決定中にランタイムオーバーヘッドがないことを確認します。 4.このテクノロジーは、STD :: Advanceなどの標準ライブラリによって採用されており、拡張カスタマイズをサポートしています。

theautokeywordinc deducestheTypeofavariaible fromitializer、makingcodecleanerandmoremaintable.1.特に、特にコンペルスティペステルター。2

CompatitibilityのCompathos、Applications、およびFeatures; 2.BackupallData、Configs、AndLogs; 3.ChooseUpGradeMethod(PackageManager、MySqlinStaller、Ormanual);

このCシングルリンクの例は、挿入、トラバーサル、削除操作を実装します。 1. InsertAtBeginingを使用して、ヘッドにノードを挿入します。 2. insertAtendを使用して、テールにノードを挿入します。 3. deleteNodeを使用して、値によってノードを削除し、ブール結果を返します。 4.表示メソッドを使用して、リンクリストをトラバースして印刷します。 5.漏れを防ぐために、デストラクタ内のすべてのノードメモリを解放します。最終的なプログラム出力は、これらの操作の正確性を検証し、動的データ構造の基本的な管理方法を完全に実証します。
