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、运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)