C++调用mysql的存储过程

C++调用mysql的存储过程,第1张

1、测试用表:

2、创建一个存储过程:一个输入参数和一个输出参数:

CREATE PROCEDURE GET_NAME(IN in_id INT, OUT out_name VARCHAR(255))
BEGIN
	SELECT NAME INTO out_name  FROM student  WHERE id = in_id;
	SELECT out_name;
END

创建完成后用可视化工具查看并测试存储过程,保证逻辑没有问题。

3、存储过程的调用:

int main()
{
	//1.初始化环境
	MYSQL* mySql = mysql_init(NULL);
	if (mySql == NULL)
	{
		printf("数据库环境初始化失败!\n");
		return -1;
	}

	//Connect to server with option CLIENT_MULTI_STATEMENTS
	mySql = mysql_real_connect(mySql, "localhost", "root", "root", "zzc", 3306, NULL, 0);
	if (mySql == NULL)
	{
		printf("数据库连接失败!\n");
		return -1;
	}

	mysql_set_character_set(mySql, "gbk");

	char szSql[MAX_PATH] = {0};
	sprintf(szSql, "CALL GET_NAME(%d, @out_name)", 1001);
	int status = mysql_real_query(mySql, szSql, strlen(szSql));
	if (status)
	{
		printf("查询出错:%s\n", mysql_error(mySql));
	}
	else
	{
		//存储过程中有:SELECT out_name;此处可以省略
		//如果没有的话就要加上这句,否则得不到结果集
		//mysql_query(mySql, "SELECT @out_name");

		MYSQL_RES * result = mysql_store_result(mySql);
		if (result)
		{
			MYSQL_ROW m_row = nullptr;
			m_row = mysql_fetch_row(result);

			//提前已经知道只有一个数据
			cout << string(m_row[0], mysql_fetch_lengths(result)[0]) << "\t";

			mysql_free_result(result);
		}
		else
		{
			//调用mysql_field_count()来判定mysql_store_result()是否应生成非空结果集
			if (0 == mysql_field_count(mySql))
			{
				printf("%lld 行被影响\n", mysql_affected_rows(mySql));
			}
			else
			{
				printf("发生错误:%s\n", mysql_error(mySql));
			}
		}
	}

	//释放资源-数据库
	if (mySql)
	{
		mysql_close(mySql);
	}

	return 0;
}

4、运行结果:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存