目次
1. mysql API のヘッダー ファイルをインクルードする必要があります
2. mysql に接続するための具体的な手順
2.1 mysql_real_connect
2.2 mysql_query または mysql_real_query
2.3 結果セット mysql_store_result
2.4 結果セット内のデータの各行を表示します。
3. プログラミングの例
ホームページ データベース mysql チュートリアル C++ で mysql データベースに接続してデータを読み取る方法

C++ で mysql データベースに接続してデータを読み取る方法

Jun 03, 2023 am 09:05 AM
mysql c++

    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 テーブルの完全な内容は次のとおりです:

    C++ で mysql データベースに接続してデータを読み取る方法

    #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 データベースに接続してデータを読み取る方法

    以上がC++ で mysql データベースに接続してデータを読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    LinuxでGDBを使用してCアプリケーションをデバッグするためのJSON設定は何ですか? LinuxでGDBを使用してCアプリケーションをデバッグするためのJSON設定は何ですか? Aug 04, 2025 am 03:46 AM

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

    C Mutexの例 C Mutexの例 Aug 03, 2025 am 08:43 AM

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

    大規模なMySQLテーブルを管理するためのベストプラクティス 大規模なMySQLテーブルを管理するためのベストプラクティス Aug 05, 2025 am 03:55 AM

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

    c反復中のベクトルから消去します c反復中のベクトルから消去します Aug 05, 2025 am 09:16 AM

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

    Cタグの派遣の例 Cタグの派遣の例 Aug 05, 2025 am 05:30 AM

    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などの標準ライブラリによって採用されており、拡張カスタマイズをサポートしています。

    Cオートキーワードの例 Cオートキーワードの例 Aug 05, 2025 am 08:58 AM

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

    MySQLサーバーを新しいバージョンにアップグレードする方法は? MySQLサーバーを新しいバージョンにアップグレードする方法は? Aug 03, 2025 am 09:04 AM

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

    cリンクリストの例 cリンクリストの例 Aug 05, 2025 am 06:23 AM

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

    See all articles