C++远程连接MySQL数据库
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文件夹路径分别添加到包含目录和库目录中,具体操作截图如下:
- 再点击左边选项栏下的链接器,选择输入,在右边框中的附加依赖项后面输入libmysql.lib;,最后点确认。截图如下:
- 最后还需要将之前拷贝的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;
}
}
说明:此代码非原创!不过我稍加修改了,直接copy就能运行!
运行结果:
3. 总结
感觉需要学习的东西还是很多,不过总算完成了自己的一个想法,整个过程现在想起来还是挺享受的,毕竟基本达到了我的目的,最后还是要感谢网上提供资料给我的这些大佬,虽然不认识,但是我们有着共同的 feel !
感谢大家的阅读,如有不妥之处,欢迎大家leave message!
提示:若连接出现错误:MySQL server has gone away!
1.检查本地计算机和服务器是否联网
2.检查远程计算机是否打开了mysql服务
3.将远程计算机上的mysql数据库设置成允许远程以密码连接,具体操作如下:
也可以参考:https://blog.csdn.net/golden_soft/article/details/85451604