linux下,用c连接mysql,调用mysql存储过程,程序见下面。
运行结果是:
search ok!
add failed!
search failed!3个存储过程依次为查询/新增/查询(也许还有很多其他的),在执行第一个存储过程之后,再执行都不对了!!不知道哪里有问题,请高手执教!!谢谢!!# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <mysql/mysql.h>int main(int argc ,char *argv[])
{
MYSQL *m_sql;
m_sql = (MYSQL*)malloc(sizeof(MYSQL)); mysql_init(m_sql);
mysql_options(m_sql,MYSQL_READ_DEFAULT_GROUP,"mysql"); if(!mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,CLIENT_MULTI_STATEMENTS))
{
printf("Connect MySQL ERROR!\n");
exit(1);
} printf("Connect MySQL Success!\n"); //call 一个查询的存储过程
char command1[200] = "call query_POSDATA(860016, '2008-08-12 03:53:00', NULL, NULL);";
if (mysql_query(m_sql, command1) == 0 )
{
printf("search ok!\n");
}
else
{
printf("search failed!\n");
} char command2[200] = "call add_ALLOCATION('AAA', 'BBB', 13);";
if (mysql_query(m_sql, command2) == 0 )
{
printf("add ok!\n");
}
else
{
printf("add failed!\n");
} char command3[200] = "call query_POSDATA(860016, '2008-08-12 03:53:00', NULL, NULL);";
if (mysql_query(m_sql, command3) == 0 )
{
printf("search ok!\n");
}
else
{
printf("search failed!\n");
} mysql_close(m_sql);
return 0;
}
运行结果是:
search ok!
add failed!
search failed!3个存储过程依次为查询/新增/查询(也许还有很多其他的),在执行第一个存储过程之后,再执行都不对了!!不知道哪里有问题,请高手执教!!谢谢!!# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <mysql/mysql.h>int main(int argc ,char *argv[])
{
MYSQL *m_sql;
m_sql = (MYSQL*)malloc(sizeof(MYSQL)); mysql_init(m_sql);
mysql_options(m_sql,MYSQL_READ_DEFAULT_GROUP,"mysql"); if(!mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,CLIENT_MULTI_STATEMENTS))
{
printf("Connect MySQL ERROR!\n");
exit(1);
} printf("Connect MySQL Success!\n"); //call 一个查询的存储过程
char command1[200] = "call query_POSDATA(860016, '2008-08-12 03:53:00', NULL, NULL);";
if (mysql_query(m_sql, command1) == 0 )
{
printf("search ok!\n");
}
else
{
printf("search failed!\n");
} char command2[200] = "call add_ALLOCATION('AAA', 'BBB', 13);";
if (mysql_query(m_sql, command2) == 0 )
{
printf("add ok!\n");
}
else
{
printf("add failed!\n");
} char command3[200] = "call query_POSDATA(860016, '2008-08-12 03:53:00', NULL, NULL);";
if (mysql_query(m_sql, command3) == 0 )
{
printf("search ok!\n");
}
else
{
printf("search failed!\n");
} mysql_close(m_sql);
return 0;
}
DROP PROCEDURE IF EXISTS `GIStracking2`.`query_POSDATA`$$
CREATE DEFINER=`root`@`%` PROCEDURE `query_POSDATA`(
in in_devid varchar(20),
in in_gpsdttm datetime,
in in_lat double,
in in_lon double
)
BEGIN
set @stmt = "select * from POSDATA where 1=1 ";
set @stmt = concat(@stmt, " limit 50"); select @stmt;
#prepare s1 from @stmt;
#execute s1;
#drop prepare s1;
END$$
DELIMITER ;$$
DELIMITER $$;
DROP PROCEDURE IF EXISTS `GIStracking2`.`add_ALLOCATION`$$
CREATE DEFINER=`root`@`%` PROCEDURE `add_ALLOCATION`(
in in_coid varchar(10),
in in_usrid varchar(10),
in in_veid int
)
BEGIN
insert into ALLOCATION(CoID, UsrID, VeID)
values(in_coid, in_usrid, in_veid);
END$$
DELIMITER ;$$
小弟还是怀疑是连接字符串的问题。。现在小弟本地没有环境可以测试,周一会到公司再看看。谢谢各位!
修改
mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,CLIENT_MULTI_STATEMENTS))
改成
mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,CLIENT_MULTI_RESULTS))
or
mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,0))都不可以,只能执行一次sql,执行第二次sql的时候mysql_query的返回值都不对。。
那么,到底是下面3句话有问题?
mysql_init(m_sql);
mysql_options(m_sql,MYSQL_READ_DEFAULT_GROUP,"mysql");
if(!mysql_real_connect(m_sql,"127.0.0.1","root","12345","test2",0,NULL,CLIENT_MULTI_STATEMENTS))
还是mysql的设置问题呢?我程序连接到mysql,不可能执行一次就连接一次吧?