MySQL データベースへの C++ リモート接続
1. アイデア
私は最近、MySQL データベースに夢中になっており、データベースには多くの情報を保存できると感じています (重度の健忘症の私にとっては、より多くの情報が必要です)。C++言語も勉強しているので、C++言語を使ってmysqlを操作したいと考えたのですが、データベースは研究室のコンピュータにインストールされているので、mysqlにリモート接続できればいいなと思いました。この考えを念頭に置いて、インターネット上で関連するブログ投稿をたくさん見つけましたが、私のニーズを完全に満たすものはほとんどありませんでした。しかし、まだ少し助けがあります。少なくとも、vs2019 で mysql を接続するというアイデアを持たせてください。以下は私の実際の経験です。
あくまで記録用、今後の参考用、そして皆さんと勉強するためなので、不適切な点がありましたらご容赦ください!
2. 実際の操作手順とスクリーンショット
2.1 ソフトウェアとハードウェアの紹介
软件:vs2019,mysql5.7(装在另一台机器上),win10 家庭版 64位
编程语言:C++
2.2 実際のプロセス
- リモート マシン上の mysql インストール ファイルの include ディレクトリと lib ディレクトリをローカル コンピュータにコピーします。たとえば、リモート コンピュータ上の MySQL はデフォルトでインストールされているため、インストール ディレクトリは C:\Program Files\MySQL\MySQL Server 5.7 になります。これをローカル コンピューターの D:\app\mysqlCpp ディレクトリにコピーしたところ、結果は次のようになります。
- vs2019 を開き、新しい空のプロジェクトを作成し、プロジェクト名を右クリックしてプロパティを選択し、ポップアップ プロジェクト プロパティ ウィンドウの左列でVC++ ディレクトリを選択し、コピーしたばかりの include フォルダーと lib フォルダーのパスをinclude ディレクトリに追加します。とライブラリ ディレクトリそれぞれ、具体的な操作のスクリーンショットは次のとおりです。
- 次に、左側のオプション バーの下にあるリンカーをクリックし、 「input」を選択し、右側のフレームの追加の依存関係の後に「libmysql.lib」と入力し、最後に「OK」をクリックします。以下のスクリーンショット:
- 最後に、以前にコピーした 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
も参照できます。