一、连接属性环境
1. 修改项目属性的包含目录与库目录,其分别包含为MySQL安装目录中的clude与lib
2. 添加依赖项libmysql.lib,同时将libmysql.dll文件复制在c:\windows\system32文件下
3. 环境安置
把环境设置为数据库的bin文件夹即可,注意末尾分号要用半角的
测试代码:
#include <stdio.h>
#include <mysql.h> // mysql 文
int main(void)
{
MYSQL mysql;//数据库句柄
MYSQL_RES* res; //查询结果集
MYSQL_ROW row; //记录结构体
//初始化数据库
mysql_init(&mysql);
//设置字符编码
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
//连接数据库
/* mysql_real_connect(
* &mysql, 调用mysql_init()初始化MYSQL结构
const char host, 值可以是一个主机名或一个IP地址
const char user, 参数包含用户的MySQL登录ID
const char passwd, 加密口令,访问密码
const char db, 数据库名
unsigned int port, 值对应TCP/IP连接将用作端口
const char unixsocket, 一般为NULL
unsigned intclientflag 一般为0
)*/
if (mysql_real_connect(&mysql, "x.x.x.x", "root", "password", "数据库名", 3306, NULL, 0) == NULL)
{
printf("错误原因:%s\n", mysql_error(&mysql));
printf("连接失败!\n");
exit(-1);
}
//查询数据
int ret = mysql_query(&mysql, "select * from 表名;");
printf(" ret: %d\n", ret);
//获取结果集
res = mysql_store_result(&mysql);
//给 ROW 赋值, 判断 ROW 是否为空, 不为空就打印数据。
while (row = mysql_fetch_row(res))
{
printf("%s ", row[0]); //字段1
printf("%s ", row[1]); //字段2
printf("%s ", row[2]); //字段3
printf("%s \n", row[3]); //字段4
}
//释放结果集
mysql_free_result(res);
//关闭数据库
mysql_close(&mysql);
system("pause");
return 0;
}
二 、 bug调试
1. 若出现由于找不到libmysql.dll / 由于找不到libssl-1_1-x64.dll,无法继续执行代码
解决方法:在项目属性页的“配置属性”-“调试”-“环境” 中编辑,把环境设置为数据库的bin文件夹即可,注意末尾分号要用半角的
例:此处配置MySQL连接的环境
PATH=C:\Program Files\MySQL\MySQL Server 8.0\bin
2. VS19运行程序,出现“由于找不到VCRUNTIME140D.dll,无法继续执行代码。重新安装程序可能会解决此问题
经查询,在系统文件中已有VCRUNTIME140D.dll。
解决方法:修改代码生成的运行库即可。
3. 若出现Host is not allowed to connect to this MySQL server解决方法
错误原因:MySQL不允许远程登陆
解决方法:若是防火墙没有限制3306端口,修改MySQL的访问权限
mysql -u root -p #登录mysql
use mysql #选择数据库
update user set host = '%' where user = 'root'; #修改为授权所有
flush privilegs #刷新权限
4. 数据库无法连接的情况
诸如SQLyog错误代码0258的情况,即密码的方式发生了改变
解决方案:以管理员运行MySQL 8.0 Command Line Client - Unicode,输入密码,登录MySQL;
按照以下格式输入命令,其中password指密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
若发生错误,即查询其root的权限是什么,即
use mysql # 选择数据库
select user,host from user; #查看数据表内的内容
若是root后的权限发生改变,即若为 %,即改为
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';