教程:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)

版权声明:本文为博主原创文章,你们可以随便转载 https://blog.csdn.net/Jaihk662/article/details/80244042


步骤①:

确保 VS2012 和 Mysql 软件能正常运行

VS2015/VS2010等其它版本应该都行,Mysql也是


步骤②:

添加<mysql.h>头文件到VS库


之后添加包含目录如下


一般的mysql都默认在C://program files里面,之后按照图中的路径选择mysql.h所在的文件夹即可,下同


步骤③:

添加库文件"libmysql.lib"




步骤④:

其实到这里就搞定了,不过还需要进行测试,新建cpp输入以下代码:

#include<winsock.h>
#include<iostream>
#include<string>
#include<mysql.h>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")
//单步执行,不想单步执行就注释掉
//#define STEPBYSTEP
int main(void)
{
	cout<<"****************************************"<<endl;
#ifdef STEPBYSTEP
	system("pause");
#endif
	//必备的一个数据结构
	MYSQL mydata;
	//初始化数据库
	if(mysql_library_init(0, NULL, NULL)==0)
		cout<<"mysql_library_init() succeed"<<endl;
	else
	{
		cout<<"mysql_library_init() failed"<<endl;
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//初始化数据结构
	if(mysql_init(&mydata)!=NULL)
		cout<<"mysql_init() succeed"<<endl;
	else
	{
		cout<<"mysql_init() failed"<<endl;
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//在连接数据库之前,设置额外的连接选项
	//可以设置的选项很多,这里设置字符集,否则无法处理中文
	if(mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")==0)
		cout<<"mysql_options() succeed"<<endl;
	else
	{
		cout<<"mysql_options() failed"<<endl;
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//连接数据库
	if(mysql_real_connect(&mydata, "localhost", "root", "chensijie", "sct", 3306, NULL, 0)!=NULL)	//这里的地址,用户名,密码,端口可以根据自己本地的情况更改
		cout<<"mysql_real_connect() succeed"<<endl;
	else
	{
		cout<<"mysql_real_connect() failed: "<<mysql_error(&mydata)<<endl;
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//sql字符串
	string sqlstr;
	//创建一个表
	sqlstr = "CREATE TABLE IF NOT EXISTS user_info";
	sqlstr += "(";
	sqlstr +=  "user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";
	sqlstr += "user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";
	sqlstr += "user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'";
	sqlstr += ");";
	if(mysql_query(&mydata, sqlstr.c_str())==0)
		cout<<"mysql_query() create table succeed"<<endl;
	else
	{
		cout<<"mysql_query() create table failed"<<endl;
		mysql_close(&mydata);
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//向表中插入数据
	sqlstr = "INSERT INTO user_info(user_name) VALUES('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名');";
	if(mysql_query(&mydata, sqlstr.c_str())==0)
		cout<<"mysql_query() insert data succeed"<<endl;
	else
	{
		cout<<"mysql_query() insert data failed"<<endl;
		mysql_close(&mydata);
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//显示刚才插入的数据
	sqlstr = "SELECT user_id,user_name,user_second_sum FROM user_info";
	MYSQL_RES *result = NULL;
	if(mysql_query(&mydata, sqlstr.c_str())==0)
	{
		cout<<"mysql_query() select data succeed"<<endl;
		//一次性取得数据集
		result = mysql_store_result(&mydata);
		//取得并打印行数
		int rowcount = mysql_num_rows(result);
		cout<<"row count: "<<rowcount<<endl;
		//取得并打印各字段的名称
		unsigned int fieldcount = mysql_num_fields(result);
		MYSQL_FIELD *field = NULL;
		for(unsigned int i=0;i<fieldcount;i++)
		{
			field = mysql_fetch_field_direct(result, i);
			cout<<field->name<<"\t\t";
		}
		cout<<endl;
		//打印各行
		MYSQL_ROW row = NULL;
		row = mysql_fetch_row(result);
		while(NULL!=row)
		{
			for(int i=0;i<fieldcount;i++)
				cout<<row[i]<<"\t\t";
			cout<<endl;
			row = mysql_fetch_row(result);
		}
	}
	else
	{
		cout<<"mysql_query() select data failed"<<endl;
		mysql_close(&mydata);
		return -1;
	}
#ifdef STEPBYSTEP
	system("pause");
#endif
	//删除刚才建的表
	sqlstr = "DROP TABLE user_info";
	if(mysql_query(&mydata, sqlstr.c_str())==0)
		cout<<"mysql_query() drop table succeed"<<endl;
	else
	{
		cout<<"mysql_query() drop table failed"<<endl;
		mysql_close(&mydata);
		return -1;
	}
	mysql_free_result(result);
	mysql_close(&mydata);
	mysql_server_end();
	//system("pause");
	return 0;
}


更改好账户名密码地址后就可以运行了,最终成功应该是如下界面:


代码是网上找到的,进行了一些修改


中间会遇到的问题及解决方案:

①找不到头文件<stdbool.h>

直接在头文件<mysql.h>所在文件夹里新建一个头文件<stdbool.h>内容直接留空就行,这是老版本遗留下来的问题了



②:编译失败!遇到一大堆无法解析的外部符号

因为Mysql是64位的,而你的VS是32位的所以不兼容

可以修改VS→64位如下:


也可以去网上下载32位的"libmysql.lib"和"libmysql.dll"文件

给个下载链接:https://download.csdn.net/download/second_riven/7704817


③:无法启动此程序,因为计算机丢失了libmysql.dll文件

将lib目录下的"libmysql.dll"拷贝到工程目录下的"debug"文件下



④:数据库连接失败,mysql_real_connect()返回NULL

原因很多了,mysql_error()会返回错误报告,并百度搜索该错误报告应该都能解决问题

检查一下是否密码错误、地址错误等

一个很经典的错误是:mysql8.0 Authentication plugin 'caching_sha2_password' cannot be loaded

这是因为你的Mysql是8.0版本的,而8.0改变了身份验证插件

解决方法:打开你的Mysql,通过以下语句修改密码:

#ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '新密码';

搞定



阅读更多
换一批

没有更多推荐了,返回首页