本文记录了如何使用mysql for c库连接本地/网络上的mysql数据库
在阅读本文之前需要确认你有Mysql本地环境或者网络mysql数据库。
正文
首先,我的环境:
VS 2019
win 7
第二步,下载MySQL库 for C
到这里下载:
https://downloads.mysql.com/archives/c-c/
其实你到网上搜mysql for c也可以搜到,打开之后看起来是这样:
我下载的是红线框起来的这个版本,,这个版本是windows系统使用的32位库,你也可以下载64位的。
这里保险起见,预留一个备用下载地址,百度网盘的:
链接: https://pan.baidu.com/s/17LaQspQNA9b_cg9PAZWGvw 提取码: i7je
解压并打开下载好的压缩包,看起来是这样的:
然后再新打开一个文件资源管理器,转到VS的安装目录:
不同的人的安装目录不一样。
然后进入到它的include和lib的存放的文件夹,不同的VS版本不太一样,不过找一找也就找得到了,VS2019是这样的:
我们分别打开VS的include文件夹和lib文件夹,然后将下载下来的mysql的压缩包中的include文件夹也打开:
将其中的所有文件复制到VS的include文件夹内:
然后是lib文件夹,MySQL文件夹内的lib文件夹中:
vs12和vs14两个文件夹里的lib应该分别是vs120和vs140两个版本的lib,根据你的版本选择其中一个lib并复制到VS的lib文件夹里,就不放图了。
总结:
将MySql的所有include文件复制到VS的include文件夹里
将MySQL的vs12或vs14里的lib复制到VS的lib文件夹里
然后创建一个MySQL测试项目,将MySQL的文件夹里的lib文件夹里的libmysql.dll和libmysql.lib复制到项目目录下
注意,每个使用Mysql库的项目下都要放这两个文件才行,当要发布release时,需要在程序目录下带上libmysql.dll。
最后在项目代码中输入代码进行测试:
#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;
}
}
这段代码来自https://blog.csdn.net/dubulingbo/article/details/103208059
这段代码中的MYSQL数据库连接信息需要自己修改,SQL语句也要自己修改。
有人可能不知道自己的主机ip之类的信息,
如果是本地主机,那么ip填localhost
如果是服务器的,那么到你买数据库的网站上查,我的是这样:
蓝框内的是ip,复制下来,还有数据库帐号密码之类的信息也在这。
然后编译。
如果编译出错,请检查:
1-有没有在cpp中写#pragma comment(lib,"libmysql.lib")
2-下载的mysql库位数和编译的程序的位数是否一致,比如是32位的库,那编译程序时也要编译32位程序
如果编译过关,那么运行程序,如果出现提示
MySQL server has gone away
那么检查数据库信息是否填写正确,一定要仔细看帐号密码是否正确。
如果还是不行,那我也没办法。
如果没有提示这个,那么如果你的代码中的SQL语句没毛病,那么程序会显示出查询结果:
(我的直接查了我的数据库,有点乱。)
当你看到cmd输出成功了查询结果时,恭喜你使用MySQL库成功了。
推荐使用我做的mysql_tools来操作mysql数据库,更方便:http://huidong.xyz/index.php?mode=2&id=188