使用vs2019操作 mysql 数据库遇到的问题,使用查询功能正常,但是随后插入数据到数据库的操作语句始终没有反应,不知道是哪里的问题,查找网上很多资料,终于找到原因,记录一下。
//连接数据库 #include#include #include #include #include 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:%sn", 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;
只是自己学习过程记录问题,以后遇到相同问题方便回头查询。
参考博客:
VS2019中接连MySQL全部过程_落春只在无意间的博客-CSDN博客_mysql vs2019
C语言连接Mysql数据库,执行mysql_query()或mysql_real_query()时出错,即返回值为1解决办法 - Rogunt - 博客园



