C++操作存储过程 2014 问题 MySQL
2012-07-02 17:25
253 查看
操作存储过程连接代码
错误代码:
Commands out of sync; you can't run this command now
上面的最后一个参数,需要使用
C++操作MySQL存储过程中,出现如下错误
原因应该是MYSQL_RES 结果在下一次查询的时候没有被释放掉,所以出现该错误
官方解释如下:
Mysql文档中说明错误:Commands out of sync
If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.
This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result()
in between.
当执行完query后,mysql将结果集放在一个result集中,产生以上问题的原因有两个:
一是未将MYSQL_RES所指对象释放,即在下次查询时要mysql_free_result();
二是结果result集不为空,这个原因比较隐蔽。解决方法可以用如下写法:
我的解决方法:两种
第一种方法:调用一次查询函数,释放一次,做到每一次操作数据库,都重新连接一次数据库,用完该次操作立刻释放掉MYSQL_RES结果集
该方法,操作数据库频繁,效率相对不高
第二种方法:将所有的数据读到缓存中,对缓存进行读写,效率较高,空间换时间的一种做法。
两种方法都有各自的解决方法,取决于你的程序的实际情况。
错误代码:
Commands out of sync; you can't run this command now
DB_Param mDB("192.168.1.254", "admin", "admin", "node", 3306, NULL, CLIENT_MULTI_STATEMENTS );//CLIENT_MULTI_RESULTS); CMysql mysql(mDB); bool CMysql::ConnectDB(DB_Param* p) { if(!mysql_real_connect(&mysql,(p->mStrHost).c_str(),p->mStrUser.c_str(),p->mStrPassword.c_str(),p->mStrDB.c_str(),p->mIPort,p->unix_socket,p->client_flag)) { return false; } return true; }
上面的最后一个参数,需要使用
CLIENT_MULTI_STATEMENTS )或者CLIENT_MULTI_RESULTS)
C++操作MySQL存储过程中,出现如下错误
Commands out of sync; you can't run this command now
原因应该是MYSQL_RES 结果在下一次查询的时候没有被释放掉,所以出现该错误
官方解释如下:
Mysql文档中说明错误:Commands out of sync
If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.
This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result()
in between.
当执行完query后,mysql将结果集放在一个result集中,产生以上问题的原因有两个:
一是未将MYSQL_RES所指对象释放,即在下次查询时要mysql_free_result();
二是结果result集不为空,这个原因比较隐蔽。解决方法可以用如下写法:
do { /* Process all results */ printf("total affected rows: %lld", mysql_affected_rows(mysql)); ... if (!(result= mysql_store_result(mysql))) { printf(stderr, "Got fatal error processing query/n"); exit(1); } process_result_set(result); /* client function */ mysql_free_result(result); } while (!mysql_next_result(mysql));上面的代码在我的程序中没有成功。
我的解决方法:两种
第一种方法:调用一次查询函数,释放一次,做到每一次操作数据库,都重新连接一次数据库,用完该次操作立刻释放掉MYSQL_RES结果集
该方法,操作数据库频繁,效率相对不高
第二种方法:将所有的数据读到缓存中,对缓存进行读写,效率较高,空间换时间的一种做法。
两种方法都有各自的解决方法,取决于你的程序的实际情况。
相关文章推荐
- navicat连接CentOS的mysql在创建存储过程时出现1146 - Table ‘mysql.proc’ doesn't exist的问题
- gcc编译c语言调用mysql存储过程代码出现的问题list
- Golang 用go-sql-driver 调用MySQL存储过程时的问题排查
- MYSQL2014问题
- mysql存储过程、视图等的权限问题
- mysql通用分页存储过程遇到的问题
- mysql无法创建存储过程问题 ERROR 1307 (HY000)
- mysql 存储过程 中文参数 乱码 问题
- mysql存储过程一次连接多次调用失败的问题解决
- mysql 存储过程 declared局部变量 赋值失败问题(不循环)
- mybatis调用mysql存储过程(返回值问题)
- MyEclipse2014与MySQL中文乱码问题
- mysql C api 多线程多连接 存储过程 锁表问题
- 记一次工作中解决实际问题使用的MySql存储过程
- Oracle中存储过程迁移到Mysql的问题集锦
- mysql 存储过程遇到的小问题
- mysql中存储过程、函数的一些问题
- Mysql问题及解决——Error code2014
- mysql存储过程count结果错误问题
- PHP执行MYSQL存储过程报错:Commands out of sync; you can't run this command now 问题的解决