使用vs2019操作 mysql 数据库遇到的问题,使用查询功能正常,但是随后插入数据到数据库的操作语句始终没有反应,不知道是哪里的问题,查找网上很多资料,终于找到原因,记录一下。

//连接数据库
#include <stdio.h>
#include <WinSock.h>
#include <Windows.h>
#include <mysql.h>
#include <iostream>
using namespace std;

MYSQL mysql;  //mysql连接
MYSQL_RES* res; //一个结果集结构体   
MYSQL_ROW row; //char** 二维数组,存放一条条记录  

const char DataBase_UserName[] = "root";    //数据库用户名
const char DataBase_Password[] = "12345";   //数据库密码
const char DataBase_Host[] = "localhost";  //数据库连接地址
const char DataBase_Name[] = "test";  //数据库名
unsigned int DataBase_Port = 3306;

bool ConnectDatabase(); 

void main()
{
	ConnectDatabase();	//连接数据库
	mysql_query(&mysql, "set names gbk"); // 设置编码格式

	//查询数据
	mysql_query(&mysql, "SELECT * from build_mod");

	//插入数据
    int s = mysql_query(&mysql, "insert into build_mod(build_id, build_name) values (3,'3        号工厂')");
	cout << s << endl;

	//获取结果集
	res = mysql_store_result(&mysql);
	
	//显示数据
	while (row = mysql_fetch_row(res))
	{
		printf("%s ", row[0]);
		printf("%s ", row[1]);
		cout << endl;
	}

	mysql_close(&mysql);
	getchar();
	
}

bool ConnectDatabase()
{
	//初始化mysql
	mysql_init(&mysql);   //连接mysql,数据库
	if (!(mysql_real_connect(&mysql, DataBase_Host, DataBase_UserName, DataBase_Password, DataBase_Name, DataBase_Port, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
	{
		printf("Error connecting to database:%s\n", mysql_error(&mysql));
		return false;
	}
	else
	{
		printf("Database connection succeeded. Connected...\n");
		return true;
	}
}

        这样子的代码运行结果是能显示查询的结果,但是插入sql语句没有起作用,打印mysql_query()函数的运行结果输出为1,说明出现错误。

        问题出在,查询的结果集没有释放,不能进行插入操作,所以有两种解决方案:

方案一:将插入语句放置在查询语句之前,这样的话查询的结果里面会包含刚插入的结果。

//插入数据
	int s = mysql_query(&mysql, "insert into build_mod(build_id, build_name) values (3,'3号工厂')");
	//cout << s << endl;

	//查询数据
	mysql_query(&mysql, "SELECT * from build_mod");

	//获取结果集
	res = mysql_store_result(&mysql);

方案二:查询之后将查询的结果集充分释放,再进行插入数据操作,这样的查询结果里面就不包含刚插入的数据。

//查询数据
	mysql_query(&mysql, "SELECT * from build_mod");

	//获取结果集
	res = mysql_store_result(&mysql);
	
	//显示数据
	while (row = mysql_fetch_row(res))
	{
		printf("%s ", row[0]);
		printf("%s ", row[1]);
		cout << endl;
	}

	//释放查询集
	mysql_free_result(res);
    
	//插入数据
    int s = mysql_query(&mysql, "insert into build_mod(build_id, build_name) values (3,'3        号工厂')");
	//cout << s << endl;

只是自己学习过程记录问题,以后遇到相同问题方便回头查询。