使用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;
只是自己学习过程记录问题,以后遇到相同问题方便回头查询。