1、代码如下:

  1. void TestCache(otl_connect& otlConn)
  2. {
  3. try
  4. {
  5. char sql[] = {};
  6. sprintf(sql,"call test1(1)");
  7. otl_stream stream(, sql, otlConn,otl_implicit_select);
  8.  
  9. int id;
  10. while(!stream.eof())
  11. {
  12. stream>>id;
  13. char sql2[] = {};
  14. sprintf(sql2,"call test2(:Id<int>)");
  15. otl_stream stream2(, sql2, otlConn,otl_implicit_select);
  16. stream2<<id;
  17.   
           int ff =0;
    while(!stream2.eof())
  18. {
  19. stream2>>ff;
  20. }
  21. }
  22. }
  23. catch(otl_exception& ex)
  24. {
  25. printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
  26. ex.msg,
  27. ex.stm_text);
  28. }
  29. }

2、执行otl_stream stream2(100, sql2, otlConn,otl_implicit_select);的时候出错,如下:

Commands out of sync; you can't run this command now

特别注意:如果test1 只返回1条或者0条记录,不会导致这个异常。

3、错误原因:mysql上一次的查询没有将结果集释放掉,又进行下一次的查询。
4、otl:在第一个stream读取期间,第二个stream使用了绑定变量,会导致上面的问题,不知道otl内部是怎么封装的。
5、解决办法:
a、第二个stream不使用绑定变量,如下:

  1. void TestCache(otl_connect& otlConn)
  2. {
  3. try
  4. {
  5. char sql[] = {};
  6. sprintf(sql,"call test1(1)");
  7. otl_stream stream(, sql, otlConn,otl_implicit_select);
  8.  
  9. int id;
  10. while(!stream.eof())
  11. {
  12. stream>>id;
  13. char sql2[] = {};
  14. sprintf(sql2,"call test2(%d)",id);
  15. otl_stream stream2(, sql2, otlConn,otl_implicit_select);
  16.  
  17. int ff =0;
    while(!stream2.eof())
  18. {
  19. stream2>>ff;
  20. }
  21. }
  22. }
  23. catch(otl_exception& ex)
  24. {
  25. printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
  26. ex.msg,
  27. ex.stm_text);
  28. }
  29. }

b、先把第一个stream读取完,再进行第二个stream,如下:

  1. void TestCache(otl_connect& otlConn)
  2. {
  3. try
  4. {
  5. char sql[] = {};
  6. sprintf(sql,"call test1(1)");
  7. otl_stream stream(, sql, otlConn,otl_implicit_select);
  8.  
  9. vector<int> intVec;
  10. int id;
  11. while(!stream.eof())
  12. {
  13. stream>>id;
  14. intVec.push_back(id);
  15. }
  16.  
  17. for(vector<int>::iterator iter = intVec.begin();
  18. iter != intVec.end(); ++iter)
  19. {
  20. char sql2[] = {};
  21. sprintf(sql2,"call test2(:Id<int>)");
  22. otl_stream stream2(, sql2, otlConn,otl_implicit_select);
  23. stream2<<id;
  24.  
  25. int ff =0;
    while(!stream2.eof())
  26. {
  27. stream>>ff;
  28. }
  29. }
  30. }
  31. catch(otl_exception& ex)
  32. {
  33. printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
  34. ex.msg,
  35. ex.stm_text);
  36. }
  37. }

使用otl,报错:mysql Commands out of sync; you can't run this command now的更多相关文章

  1. python mysql 2014 Commands out of sync; you can't run this command now

    这个问题出现再 mysql和c  的api. 简单的解决方法是不使用api直接把整个连接和命令传过去. 例如,cmd = 'mysql -h 192.168.32.210 -P 3316 -u bfd ...

  2. error:2014 Commands out of sync; you can't run this command now

    如下错误: 分析原因: 前端ajax请求后台,共用同一个链接. 搜索别人的解决方案:http://blog.csdn.net/grass_ring/article/details/3499402 用m ...

  3. C mysql (C API Commands out of sync; you can't run this command now)

    错误出现在当一个用户使用查询,另一个用户再使用此sql连接进行查询的时候: 原因是因为上一次使用此sql连接进行查询时没有将所有的结果集给释放掉,在所有使用此sql连接进行查询的地方将所有的结果集给释 ...

  4. _mysql_exceptions.ProgrammingError:(2014, "commands out of sync; you can't run this command now")

    今天,测试dashboard上的一些graph, 发现,当多个graph同时向后台请求数据(异步)的时候, 出现了上述错误.而且,三个bug交替出现,另外两个bug分别是:python stop re ...

  5. mysql_query error:Commands out of sync;you can't run this command now

    MYSQL_REST *result没有释放, 用mysql_free_result(result)即可.

  6. MySql: ”Commands out of sync“Error (Connect/C++)

    使用 Connector/C++ 查询 Mysql , 连续调用存储过程时 会出现如下: Commands out of sync; you can't run this command now,st ...

  7. mysql启动报错 mysql InnoDB: Error: could not open single-table tablespace file

    mysql启动不成功,报错 mysql InnoDB: Error: could not open single-table tablespace file innodb_force_recovery ...

  8. mysql 数据传输报错 MySQL server has gone away With statement:

    利用navicat premium 拷贝数据库时,报错MySQL server has gone away With statement:, 造成这样的原因一般是sql操作的时间过长,或者是传送的数据 ...

  9. MySQL Insert数据量过大导致报错 MySQL server has gone away

    接手了同事的项目,其中有一个功能是保存邮件模板(包含图片),同事之前的做法是把图片进行base64编码然后存在mysql数据库中(字段类型为mediumtext)然后保存三张图片(大概400k)的时候 ...

随机推荐

  1. 浅谈C#当中的out关键字(转载)+说明

    与ref关键字一样,out关键字也是按引用来传递的. 示例演示了out关键字的使用方法,其功能是获取数组中的最大值和最大值的索引 using System; using System.Collecti ...

  2. java 字符串处理

    第一张: 第二张:

  3. Postgres-XL介绍

    一.什么是Postgres-XL XL的意思是:eXtensible Lattice,可以扩展的格子,即将PostgreSQL应用在多机器上的分布式数据库的形象化表达. Postgres-XL 是一个 ...

  4. 【转】Tomcat调优指南

    转载地址:http://blog.csdn.net/woohooli/article/details/3954792 1          概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可 ...

  5. js笔记---(运动)通用的move方法,兼容透明度变化

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 用python requests库写一个人人网相册爬虫

    担心人人网会黄掉,写个爬虫,把我的相册照片都下载下来.代码如下: # -*- coding: utf-8 -*- import requests import json import os def m ...

  7. 用re-sign.jar重签名apk后安装失败的解决办法

    问题 打开re-sign.jar,将下载好的apk拖入re-sign.jar的界面进行重签名.重签名成功后,通过adb intall命令安装重签名后的apk文件失败.提示:Failure [INSTA ...

  8. 2016年12月8日 星期四 --出埃及记 Exodus 21:3

    2016年12月8日 星期四 --出埃及记 Exodus 21:3 If he comes alone, he is to go free alone; but if he has a wife wh ...

  9. mysql DATE_ADD DATE_SUB

    一.DATE_ADD() 函数向日期添加指定的时间间隔. DATE_ADD(date,INTERVAL expr type)date 参数是合法的日期表达式.expr 参数是您希望添加的时间间隔. t ...

  10. 企业邮件服务器被列入RBL,申请撤销PBL指控

    1.登录[url]http://www.spamhaus.org/pbl/index.lasso[/url],在红框中输入企业电子邮件服务器MX记录地址: