栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

vs2019(c++)向mysql数据库插入数据

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

vs2019(c++)向mysql数据库插入数据

        使用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 - 博客园

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号