--创建表
CREATE TABLE userinfo
(
userid int,
username varchar(31)
);
CREATE TABLE areainfo
(
areaid int,
areaname varchar(31)
);
--插入数据
INSERT INTO test.areainfo
(areaid, areaname)
VALUES (1, '上海');INSERT INTO test.areainfo
(areaid, areaname)
VALUES (2, '成都');INSERT INTO test.areainfo
(areaid, areaname)
VALUES (3, '北京');--------------------------------------
INSERT INTO test.userinfo
(userid, username)
VALUES (1, '张三');INSERT INTO test.userinfo
(userid, username)
VALUES (2, '李四');INSERT INTO test.userinfo
(userid, username)
VALUES (3, '王王');----创建存储过程
create procedure getUserArea2
(keyid int)
begin
select * from test.areainfo;
select * from test.userinfo;
end---------------------------------
--问题..
在c/C++ 中如何调用这个存储过程并获取结果...代码:#include <windows.h>
#include <iostream>
#include <string>
#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下using namespace std;
string host="localhost"; //登陆mysql使用的主机名
string user="root"; //登陆用户string pwd="sa"; //填写自己数据库密码
string dbname="test"; //您要登陆的数据库名
string sqlProcess="call getUserArea(3)"; //sql存储过程语句
unsigned int port=3306; //数据库端口,默认为3306,也可以填写你自己制定的端口
int status; //数据库执行返回的状态,sql语句执行成功返回0int main()
{
MYSQL *mysql;
mysql=mysql_init(0); //接口,初始化
MYSQL_RES *result;
MYSQL_ROW row; //返回数据行
//连接数据库
if( mysql_real_connect( mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS ) == NULL )
{
cout << "connect failure!" << endl;
return EXIT_FAILURE;
}
else
{
cout << "connect success!" << endl;
}
mysql_set_character_set( mysql, "gbk" );
//执行存储过程调用
status = mysql_query( mysql, sqlProcess.c_str( ) );
if( status != 0 )
{
cout << "query failure!" << endl;
}
cout << "the status is :" << status << endl; result = mysql_store_result( mysql );
//显示结果 ....此外出错..
while( row = mysql_fetch_row( result ) )
{
cout << row[0] <<"|" << row[1] << endl;
}
}
CREATE TABLE userinfo
(
userid int,
username varchar(31)
);
CREATE TABLE areainfo
(
areaid int,
areaname varchar(31)
);
--插入数据
INSERT INTO test.areainfo
(areaid, areaname)
VALUES (1, '上海');INSERT INTO test.areainfo
(areaid, areaname)
VALUES (2, '成都');INSERT INTO test.areainfo
(areaid, areaname)
VALUES (3, '北京');--------------------------------------
INSERT INTO test.userinfo
(userid, username)
VALUES (1, '张三');INSERT INTO test.userinfo
(userid, username)
VALUES (2, '李四');INSERT INTO test.userinfo
(userid, username)
VALUES (3, '王王');----创建存储过程
create procedure getUserArea2
(keyid int)
begin
select * from test.areainfo;
select * from test.userinfo;
end---------------------------------
--问题..
在c/C++ 中如何调用这个存储过程并获取结果...代码:#include <windows.h>
#include <iostream>
#include <string>
#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下using namespace std;
string host="localhost"; //登陆mysql使用的主机名
string user="root"; //登陆用户string pwd="sa"; //填写自己数据库密码
string dbname="test"; //您要登陆的数据库名
string sqlProcess="call getUserArea(3)"; //sql存储过程语句
unsigned int port=3306; //数据库端口,默认为3306,也可以填写你自己制定的端口
int status; //数据库执行返回的状态,sql语句执行成功返回0int main()
{
MYSQL *mysql;
mysql=mysql_init(0); //接口,初始化
MYSQL_RES *result;
MYSQL_ROW row; //返回数据行
//连接数据库
if( mysql_real_connect( mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS ) == NULL )
{
cout << "connect failure!" << endl;
return EXIT_FAILURE;
}
else
{
cout << "connect success!" << endl;
}
mysql_set_character_set( mysql, "gbk" );
//执行存储过程调用
status = mysql_query( mysql, sqlProcess.c_str( ) );
if( status != 0 )
{
cout << "query failure!" << endl;
}
cout << "the status is :" << status << endl; result = mysql_store_result( mysql );
//显示结果 ....此外出错..
while( row = mysql_fetch_row( result ) )
{
cout << row[0] <<"|" << row[1] << endl;
}
}
解决方案 »
- 这个SQL语句什么意思。。。
- mysql存储过程中怎么动态构造含表名的生气了sql语句
- ★★急问★★ MySQL是否支持 【[字段1] like '%'+[字段2]+'%'】 这种查询?
- SOL领域讨论: MySQL InnoDB 的性能问题
- MYSQL输出乱码! 急!我要疯了!!!
- 我可是初学者啊,就不知道这是啥问题。
- 眼珠子都快看出来了,都没看出错在哪?关于mysql插入
- 如何在进行表更新操作时把表锁定,有这样的命令么? 急!!
- MySql连接问题1067错误
- update mysql清零数据的问题
- MySQL C API 中关于 select * 的疑问
- 表的存储引擎为myisam,如何去掉以前的自动commit功能,让程序员手动写程序commit呢?
http://iihero.com/?id=12里边有一个子函数:
test_more_results()
在MySql5.1的文档中找到解决方法
详见:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-multiple-queries
的25.2.9. 多查询执行的C API处理
除了使用mysql_next_result(), 在连接时还添加参数 CLIENT_MULTI_STATEMENTS
新代码如下.
#include <windows.h>
#include <iostream>
#include <string>
#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下using namespace std;
string host = "localhost"; //登陆mysql使用的主机名
string user = "root"; //登陆用户int status; //数据库执行返回的状态,sql语句执行成功返回0
string pwd = "sa"; //填写自己数据库密码
string dbname = "test"; //您要登陆的数据库名
unsigned int port = 3306; //数据库端口,默认为3306,也可以填写你自己制定的端口
string sql = "select * from userinfo"; //sql语句,下面使用接口在c语言中执行该语句
string sqlProcess = "call getUserArea2(3)"; //sql存储过程语句int main()
{
MYSQL *mysql;
mysql = mysql_init(0); //接口,初始化
MYSQL_RES *result;
MYSQL_ROW row; //返回数据行
//连接数据库
if (mysql_real_connect(mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS) == NULL)
{
cout << "connect failure!" << endl;
return EXIT_FAILURE;
}
else
{
cout << "connect success!" << endl;
}
mysql_set_character_set(mysql, "gbk");
//执行存储过程调用
status = mysql_query(mysql, sqlProcess.c_str());
if (status != 0)
{
cout << "query failure!" << endl;
}
cout << "the status is :" << status << endl;
do
{
if (result = mysql_store_result(mysql))
{
//显示结果
while (row = mysql_fetch_row(result))
{
cout << row[0] << "|" << row[1] << endl;
}
//process_result_set(result);
mysql_free_result(result);
}
}
while (!mysql_next_result(mysql));
}