仕事の関係で、さまざまなデータベースにアクセスするための C/C++ メソッドを学ぶのに 1 週間かかります。そして、データベース操作クラスのセットをカプセル化する計画を立てています。次に、最も単純な部分、つまり の下で MySQL データベースにアクセスする方法を紹介します。リナックス。
C++ でプロジェクトを書きたい場合はデータベースが必須なので、ここ 2 日間で C++ で MySQL データベースを操作する方法を学びました。チュートリアルはありません。ネットで調べた知識のみです。
MySQL データベースに接続するには 2 つの方法があります。1 つ目は、ADO を使用して接続する方法ですが、これは Windows プラットフォームにのみ適しています。2 つ目は、MySQL を使用する独自の C API関数データベースに接続します。私は Linux プラットフォームで開発しているため、2 番目の方法を使用します。API 関数はたくさんありますが、一般的に使用されるものはほんの一部であり、私もそのうちのいくつかしか使用しません。
API 関数
1.mysql_real_connect()
mysql サーバーに接続します
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* 接続ハンドルを返します。接続に失敗した場合は、NULLを返します。接続が成功した場合、戻り値は最初のパラメータの値と同じになります
2.mysql_query()
を実行して戻ります。結果テーブル。クエリが成功したと仮定すると、mysql_num_rows() を呼び出して SELECT ステートメントに対応して返された行の数を確認するか、mysql_affected_rows() を呼び出して DELETE に対応して影響を受けた行の数を確認できます。 、INSERT、REPLACE、または UPDATE
ステートメント。 3.mysql_store_result()MYSQL_RES *mysql_store_result(MYSQL *mysql)完全な結果セットをクライアントに取得します。クライアントが結果セットを処理する最も一般的な方法は、結果セット全体を一度に取得する mysql_store_result() を呼び出すことです。この関数は、クエリによって返されたすべての行をサーバーから取得し、クライアントに保存します。データを正常に取得するすべてのクエリ (SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE など) に対して、mysql_store_result() または mysql_use_result() を呼び出す必要があります。他のクエリの場合、mysql_store_result() または mysql_use_result() を呼び出す必要はありませんが、いずれの場合でも mysql_store_result() が呼び出されても、害やパフォーマンスの低下は発生しません。 4.mysql_num_rows()結果セット内の行数を返します。
5.mysql_num_fields
()結果セット内のフィールドの数を返します。失敗した場合は false を返します。6.mysql_fetch_field
()
MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);
7.mysql_fetch_row
()MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);結果セットから次の行を取得し、0 より大きい値を持つ array
を正常に返します。 ect()
MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i);
フィールド番号を指定すると、テーブルフィールドのタイプを返し、最後に NULL を返します。 簡単な学生情報管理コード
見ただけでは覚えられないので、これらの関数を使って学生情報管理インターフェースを書きました、ああ、去年の今頃、私はC言語
のコース設計をしていました。当時はデータベースの使い方を全く知りませんでした。気づいた時には遅かったと後悔しました。 。 。 。コードは次のとおりです:/************************************************************************* > File Name: student.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 16时50分34秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <sstream> #include <mysql/mysql.h> #include <unistd.h> using namespace std; MYSQL mysql; MYSQL_ROW row; MYSQL_FIELD* field = NULL; MYSQL_RES* result; string IntToStr(int num) { stringstream ss; ss.clear(); ss << num; return ss.str(); } void Add() { string fname,fsex,ftel,faddr; int fage; char choice; do { ┊ cout << "请依次输入以下信息:" << endl; ┊ cout << "\nName: ";cin >> fname; ┊ cout << "\nSex: ";cin >> fsex; ┊ cout << "\nAge: "; cin >> fage; ┊ cout << "\nTel: "; cin >> ftel; ┊ cout << "\nAddr: "; cin >> faddr; ┊ string sql = "INSERT INTO Infor (name,sex,tel,addr,age) values('"+fname+"','"+fsex+"','"+ftel+"','"+faddr+"', "+IntToStr(fage)+");"; ┊ //string sql = "INSERT INTO Infor (name,sex,age,tel,addr) values('小红','女',18,'13333333333', '陕西省西安市雁塔区');"; ┊ mysql_query(&mysql,sql.c_str()); ┊ ┊ ┊ cout << "是否继续添加(y/n)?: "; ┊ cin >> choice; }while(choice == 'y'); } void Select() { int id; cout << "请输入要查询学生的学号: "; cin >> id; string sql = "SELECT * FROM Infor WHERE id = "+IntToStr(id)+";"; mysql_query(&mysql,sql.c_str()); result = mysql_store_result(&mysql); if(result == NULL) ┊ cout << "fail\n"; for(int i=0; i<mysql_num_fields(result); i++) { ┊ field = mysql_fetch_field_direct(result,i); ┊ cout << field->name << "\t\t"; } cout << endl; row = mysql_fetch_row(result); while(row != NULL) { ┊ for(int i=0; i<mysql_num_fields(result); i++) ┊ { ┊ ┊ cout << row[i] << "\t\t"; ┊ } ┊ cout << endl; ┊ row = mysql_fetch_row(result); } } void Update() { int id; char choice; string newaddr; ┊ cout << "请输入要修改同学的学号: "; ┊ cin >> id; ┊ cout << endl << "请输入修改后的地址: "; ┊ cin >> newaddr; ┊ string sql = "UPDATE Infor SET addr = '"+newaddr+"'WHERE id= "+IntToStr(id)+"; "; ┊ mysql_query(&mysql,sql.c_str()); ┊ } int main() { char choice[5]; mysql_init(&mysql); /*连接数据库*/ if(!mysql_real_connect(&mysql,"localhost","root","dxm242012","Student",0,NULL,0)) { ┊ cout << "connect fial\n"; ┊ return -1; } while(atoi(choice) != 'q') { ┊ sleep(4); ┊ system("clear"); ┊ cout << "1.添加学生信息" << endl; ┊ cout << "2.查询学生信息" << endl; ┊ cout << "3.修改学生信息" << endl; ┊ cin >> choice; ┊ cout << choice << endl; ┊ switch(atoi(choice)) ┊ { ┊ ┊ case 1: ┊ ┊ ┊ Add(); ┊ ┊ ┊ break; ┊ ┊ case 2: ┊ ┊ ┊ Select(); ┊ ┊ ┊ break; ┊ ┊ case 3: ┊ ┊ ┊ Update(); ┊ ┊ ┊ break; ┊ ┊ default: ┊ ┊ ┊ break; ┊ } } mysql_close(&mysql); return 0; }MyDB クラスの C++ カプセル化 その後、これらの関数は将来簡単に使用できるように単純にカプセル化されました。
/************************************************************************* > File Name: myDB.h > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时26分22秒 ************************************************************************/ #ifndef _MYDB_H #define _MYDB_H #include <string> #include <iostream> #include <mysql/mysql.h> using namespace std; class MyDB { public: MyDB(); ~MyDB(); bool InitDB(string host,string user,string pwd,string dbname); bool ExeSQL(string sql); private: MYSQL* mysql; MYSQL* mysql; MYSQL_ROW row; MYSQL_RES* result; MYSQL_FIELD* field; }; #endif /************************************************************************* > File Name: myDB.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时27分18秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <mysql/mysql.h> #include "myDB.h" using namespace std; MyDB::MyDB() { mysql = mysql_init(NULL); if(mysql == NULL) { ┊ cout << "Error: " << mysql_error(mysql); ┊ exit(-1); } } MyDB::~MyDB() { if(!mysql) { ┊ mysql_close(mysql); } } bool MyDB::InitDB(string host,string user,string pwd,string dbname) { /*连接数据库*/ if(!mysql_real_connect(mysql,host.c_str(),user.c_str(),pwd.c_str(),dbname.c_str(),0,NULL,0)) { ┊ cout << "connect fial: " << mysql_error(mysql); ┊ exit(-1); } return true; } bool MyDB::ExeSQL(string sql) { /*执行失败*/ if(mysql_query(mysql,sql.c_str())) { ┊ cout << "query fail: " << mysql_error(mysql); ┊ exit(1); } else { ┊ /*获取结果集*/ ┊ result = mysql_store_result(mysql); ┊ int fieldnum = mysql_num_fields(result); ┊ for(int i=0; i<fieldnum; i++) ┊ { ┊ ┊ row = mysql_fetch_row(result); ┊ ┊ if(row <= 0) ┊ ┊ ┊ break; ┊ ┊ for(int j=0; j<fieldnum; j++) ┊ ┊ { ┊ ┊ ┊ cout << row[j] << "\t\t"; ┊ ┊ } ┊ ┊ cout << endl; ┊ } ┊ mysql_free_result(result); } return true; } /************************************************************************* > File Name: main.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时53分43秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <mysql/mysql.h> #include "myDB.h" using namespace std; int main() { MyDB db; db.InitDB("localhost","root","xxxxxx","Student"); db.ExeSQL("SELECT * FROM Infor;"); return 0; }実行結果は次のとおりです:
発生した問題は次のとおりです:
1. コンパイル中にエラーが発生しました
#include<mysql/mysql.h> ^
コンパイルは中断されました。 解決策: mysql-client と mysql-server に加えて、install
mysql-devel を実行すると、問題は解決します。
2. カスタム 変数
が SQL ステートメントに渡されると、問題が発生します
在网上查找到这样一种格式,
string sql = "INSERT INTO Infor (name,sex,tel,addr,age) values('"+fname+"','"+fsex+"','"+ftel+"','"+faddr+"', "+IntToStr(fage)+");";
然后string类型的可以成功,整型的变量还是不行,我又写了个函数把int转为string。
string IntToStr(int num) { stringstream ss; ss.clear(); ss << num; return ss.str(); }
以上がLinux 上で Mysql データベースの C++ 操作を実装する方法の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、DebianシステムでTigervncサーバーのファイアウォールを構成する方法について説明します。ユーザーフレンドリーなファイアウォール管理ツールであるComplicatedFireWall(UFW)を使用して構成されます。ステップ1:UFWのインストール最初に、UFW:sudoapt-getupdatesudoapt-getinstallufwステップ2:インストールが完了したらUFWを有効にする必要があります。

この記事では、DebianシステムにTigervncを完全にアンインストールする方法を紹介します。方法1:APTパッケージマネージャーを使用します。これは、推奨されるアンインストールメソッドであり、シンプルで効率的です。パッケージリストを更新します:端末を開き、次のコマンドを実行してシステムパッケージリストを更新します:sudoaptupdateアンインストールtigervnc:aptremoveコマンドを使用して、tigervncとその関連コンポーネントをアンインストールします:sudoaptretremetigervervnc-viewertigervnc-commontigervnc-commontigervenc-standaloneverneverncunc config config config

この記事では、DebianシステムでTigervncサーバーのポートを構成する方法を紹介します。 1.最初にtigervncサーバーをインストールし、tigervncサーバーがインストールされていることを確認します。インストールされていない場合は、次のコマンドを実行してください:sudoaptupdatedoaptindoaptinstinstaltigervnc-standalone-servertigervnc-common2。tigervncサーバーtigervnc構成ファイルを構成すると、通常、〜/.vnc/xstartupにあります。このファイルを編集して、ポートやその他のパラメーターを設定できます。 xstartupファイルの編集:テキストエディターを使用します(例

この記事では、Debian SystemsでTigervncを使用してリモートデスクトップ解像度を調整する方法を紹介します。ステップ1:TigerVNCサーバー(インストールされていない場合)をインストールし、次のコマンドを使用してインストールします:sudoapt-getupdatesudoapt-getInstaltaltigervnc-serverステップ2:tigervncサービスを開始してサービスを設定し、サービスを直接開始できます:vncserverまたは、vncserver:1-geometry1920-x1920-x1920-x1920-x1920-x1920-x1920-x1920-x1920-x1920-cometry1920-cometry1920-cometry1920-cometry1920-cometry1920-cometry VNCサーバーは、ディスプレイ番号1、-gを使用します

この記事では、Debian SystemsでiPtablesまたはUFWを使用してファイアウォールルールを構成し、Syslogを使用してファイアウォールアクティビティを記録する方法について説明します。方法1:Iptablesiptablesの使用は、Debian Systemの強力なコマンドラインファイアウォールツールです。既存のルールを表示する:次のコマンドを使用して現在のiPtablesルールを表示します。Sudoiptables-L-N-vでは特定のIPアクセスを許可します。たとえば、IPアドレス192.168.1.100がポート80にアクセスできるようにします:sudoiptables-input-ptcp - dport80-s192.166

DebianシステムのSyslogサービスは、システムログの記録と管理を担当し、システムの障害を診断するための重要なツールです。ログを分析することにより、ハードウェアの問題、ソフトウェアエラー、セキュリティイベントを効果的にトラブルシューティングすることができます。次の手順とコマンドでは、DebiansySlogを使用するためにトラブルシューティングに使用する方法をガイドします。1。システムログをリアルタイムで表示して最新のログを表示します。Tail-F/var/log/syslogコマンドを使用して、システムログのリアルタイム更新を監視します。これは、システムイベントとエラー情報の観察に便利です。カーネルログを表示:DMESGコマンドを使用して、カーネルの詳細なログ情報を表示します。これは、基礎となるハードウェアまたはドライバーの問題を発見するのに役立ちます。 JournalCtl(SystemD

Debianシステムのログ回転メカニズムは、通常、RsyslogまたはSyslog-ngサービスによって管理されます。この記事では、ログ回転を個別に達成するためにこれら2つのサービスを構成する方法について説明します。 1. rsyslogを使用してログ回転を構成してrsyslog(インストールされていない場合):sudoaptupdatedoaptinstallrslsylog構成rsyslog:edit /etc/rsyslog.confファイル、または新しい構成ファイルを作成し、/etc/rsyslog.d/directoryに含めます。構成ファイルに、ログの回転を有効にするために次の行が含まれていることを確認してください:$ modload

Debianユーザーが「Fetchdebian」が推奨する理由については、現在、公開情報サポートが不足しています。 「Fetchdebian」は公式のDebian派生またはツールではない可能性があり、関連する推奨情報は、誤解、特定のコミュニティ内の内部コミュニケーション、またはまだ開示されていないプロジェクトに起因する場合があります。ただし、Debianシステム自体の魅力を探ることができます。これは、ユーザーがDebianベースの分布を好む理由を説明するかもしれません。Debianの顕著な利点:優れた安定性と信頼性:Debianは、システムが安定して故障のリスクを軽減するための厳密なテストプロセスと長いリリースサイクルで知られています。大規模なソフトウェアパッケージリソース:巨大なソフトウェアウェアハウスは、何万ものソフトウェアパッケージを提供し、カバーする


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

WebStorm Mac版
便利なJavaScript開発ツール
