MySQL データベースへの C++ リモート接続

1. アイデア

私は最近、MySQL データベースに夢中になっており、データベースには多くの情報を保存できると感じています (重度の健忘症の私にとっては、より多くの情報が必要です)。C++言語も勉強しているので、C++言語を使ってmysqlを操作したいと考えたのですが、データベースは研究室のコンピュータにインストールされているので、mysqlにリモート接続できればいいなと思いました。この考えを念頭に置いて、インターネット上で関連するブログ投稿をたくさん見つけましたが、私のニーズを完全に満たすものはほとんどありませんでした。しかし、まだ少し助けがあります。少なくとも、vs2019 で mysql を接続するというアイデアを持たせてください。以下は私の実際の経験です。
あくまで記録用、今後の参考用、そして皆さんと勉強するためなので、不適切な点がありましたらご容赦ください!

2. 実際の操作手順とスクリーンショット

2.1 ソフトウェアとハ​​ードウェアの紹介

软件:vs2019,mysql5.7(装在另一台机器上),win10 家庭版 64位
编程语言:C++

2.2 実際のプロセス

  1. リモート マシン上の mysql インストール ファイルの include ディレクトリと lib ディレクトリをローカル コンピュータにコピーします。たとえば、リモート コンピュータ上の MySQL はデフォルトでインストールされているため、インストール ディレクトリは C:\Program Files\MySQL\MySQL Server 5.7 になります。これをローカル コンピューターの D:\app\mysqlCpp ディレクトリにコピーしたところ、結果は次のようになります。
    2.2.1
  2. vs2019 を開き、新しい空のプロジェクトを作成し、プロジェクト名を右クリックしてプロパティを選択し、ポップアップ プロジェクト プロパティ ウィンドウの左列でVC++ ディレクトリを選択し、コピーしたばかりの include フォルダーと lib フォルダーのパスをinclude ディレクトリに追加します。とライブラリ ディレクトリそれぞれ、具体的な操作のスクリーンショットは次のとおりです
    ここに画像の説明を挿入
  3. 次に、左側のオプション バーの下にあるリンカーをクリックし、 「input」を選択し、右側のフレームの追加の依存関係の後に「libmysql.lib」と入力し、最後に「OK」をクリックします。以下のスクリーンショット:
    ここに画像の説明を挿入
  4. 最後に、以前にコピーした lib ディレクトリにあるlibmysql.dllファイルをプロジェクトのルート ディレクトリコピーする必要があります。vs2019 はダイナミック ライブラリ ファイルをロードしてリモート データベースに接続するため、この手順は非常に重要です。スクリーンショットは次のとおりです。ここまでで、すべての構成操作が完了しました。次のステップは、「mysql に接続するためのコードの作成を開始する」というトピックに入ります。
    ここに画像の説明を挿入

2.3 テスト

テーブルのレコードをクエリして出力するだけです。特に言うことはありません。コードを直接記述するだけです。

#include <iostream>
#include <string>
#include <mysql.h>
#include<iomanip>

using namespace std;

void sqlselect(MYSQL*, const char*);     //测试查询数据 

MYSQL* mysql = NULL;

int main()
{
	//初始化MySQL连接句柄
	mysql = mysql_init((MYSQL*)0);

	mysql_real_connect
	(
		mysql,
		"10.255.60.194", //主机ip地址
		"root", //数据库用户名
		"这里输入你的root用户的密码", //数据库密码
		"要连接的库名", //数据库名称
		3306, //数据库端口,0表示默认端口(即3306)
		NULL, //如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型
		0 //通常是0
	);

	if (!mysql) //连接失败
	{
		cout << "Connection error: " << mysql_errno(mysql) 
			 << ", " << mysql_error(mysql) << endl;
	}

	const char* command = "select * from 表名"; //查询指令

	// 改变编码格式
	mysql_set_character_set(mysql, "GB2312");

	sqlselect(mysql, command); //查询数据  

	mysql_close(mysql); //关闭连接  

	return 0;
}

void sqlselect(MYSQL* mysql, const char* command)
{

	int flag = mysql_real_query(mysql, command, strlen(command));

	if (flag)
	{
		cout << "Select error: " << mysql_errno(mysql) << ", " << mysql_error(mysql) << endl;
		return;
	}

	MYSQL_RES* res = mysql_store_result(mysql); //读取将查询结果   
	MYSQL_FIELD* field = mysql_fetch_fields(res); //获取所有列名
	int field_count = mysql_field_count(mysql); //获取列数

												//输出所有列名
	for (int i = 0; i < field_count; i++)
		cout << setw(15) << field[i].name;

	cout << endl;

	//遍历输出每一行数据  
	MYSQL_ROW row;
	while (row = mysql_fetch_row(res))
	{
		for (int i = 0; i < field_count; i++)
			cout << setw(15) << row[i];
		cout << endl;
	}
}

注: このコードはオリジナルではありません。ただし、少し修正したので、コピーするだけで直接実行できるようになりました。
操作結果:
成功

3. まとめ

まだまだ学ぶべきことはたくさんあると感じていますが、やっと自分なりのアイデアが一つ完成しました。今思い返すとその過程がとても楽しいです。結局のところ、目標はほぼ達成できました。最後に、次のことをしたいと思います。インターネットで情報を提供してくれた偉い人たちに感謝します、お互いのことは知りませんが、共通の感情を持っています!
読んでいただきありがとうございます。何か間違っている場合は、メッセージを残してください。

ヒント: 接続にエラーがある場合: MySQL サーバーが消えています。
1. ローカル コンピュータとサーバーが
インターネットに接続されているかどうかを確認します 2. リモート コンピュータが mysql サービスを開いているかどうかを確認します
3. パスワードによるリモート接続を許可するようにリモート コンピュータの mysql データベースを設定します 具体的な操作https://blog.csdn.net/golden_soft/article/details/85451604
ここに画像の説明を挿入
も参照できます

おすすめ

転載: blog.csdn.net/dubulingbo/article/details/103208059
おすすめ