使用otl,报错:mysql Commands out of sync; you can't run this command now

1、代码如下:

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        int id;
        while(!stream.eof())
        {
            stream>>id;
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(:Id<int>)");
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);
            stream2<<id;

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}

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

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

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        int id;
        while(!stream.eof())
        {
            stream>>id;
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(%d)",id);
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}   

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

void TestCache(otl_connect& otlConn)
{
    try
    {
        char sql[1024] = {0};
        sprintf(sql,"call test1(1)");
        otl_stream stream(100, sql, otlConn,otl_implicit_select);

        vector<int> intVec;
        int id;
        while(!stream.eof())
        {
            stream>>id;
            intVec.push_back(id);
        }

        for(vector<int>::iterator iter = intVec.begin();
            iter != intVec.end(); ++iter)
        {
            char sql2[1024] = {0};
            sprintf(sql2,"call test2(:Id<int>)");
            otl_stream stream2(100, sql2, otlConn,otl_implicit_select);
            stream2<<id;

            while(!stream2.eof())
            {
                int ff =0;
            }
        }
    }
    catch(otl_exception& ex)
    {
        printf("ExecuteSql Error, ErrorMsg[%s], Sql[%s]",
            ex.msg,
            ex.stm_text);
    }
}

使用otl,报错:mysql Commands out of sync; you can't run this command now

时间: 2024-12-20 20:48:28

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

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

使用 Connector/C++ 查询 Mysql , 连续调用存储过程时 会出现如下: Commands out of sync; you can't run this command now,state:HY000 出现原因可以看这里:http://stackoverflow.com/questions/17115919/mysql-commands-out-of-sync-error-c-connector 这一句: Because CALL can return multiple res

mysql连接数太小,导致网站报错mysql:Too many connections

2017.9.14 一个网站上线前压力测试 网页打开报错mysql:Too many connections 一看就是mysql连接数设置过小导致的 进mysql查看连接数设置 show variables like '%max_connections%'; 只有151,怎么可以,果断决定提高到1000 PS:服务器性能可以的,哈哈 打开MySQL配置文件my.cnf添加 max_connections=1000  重启MySQL即可. 再次测试没问题咯! 方法二:命令行临时修改. set gl

ubuntu安装了mysql 但是编译报错 mysql.h: No such file or directory

在Ubuntu体系中,已经安装了mysql,即应用sudo apt-get install mysql-server mysql-client 但是用C编译mysql数据库时,报错fatal error: mysql.h: No such file or directory出现这个错误是因为体系没有安装mysql开发库 执行下面指令安装sudo apt-get install libmysql++-dev编译时须要加连接-lmysqlclient. 编译源法度的时辰,如下号令: gcc -I/u

【转】通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题 Navicat for mysql 1130错误 用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. 我认为这段英文,有点误导,让人感觉是自己这边出了问题. 看解决方法吧 ERROR 1130: Host '192.168.1.3' is n

通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL server 其实主要问题是mysql服务器那边的权限问题,默认是只允许在本地localhost登陆,所以在远程就被拒绝了,解决的方法是在mysql服务器上授权. 完整操作: 1. 在mysql服务器上:开始->运行->cmd 2. cd mysql安装目录\

mysql导入sql文件报错“MySQL server has gone away”的解决方法

登陆mysql终端,查看当前配置(默认单位是字节): show VARIABLES like '%max_allowed_packet%'; 在mysql的安装目录下 找到 my.ini文件 加入以下代码: interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M

Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

Navicat for mysql 1130错误 用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. 我认为这段英文,有点误导,让人感觉是自己这边出了问题. 看解决方法吧 ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL server 解决方法: 1.改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登

Mysql报错 :Unknown table engine &#39;InnoDB&#39; &nbsp;

问题: zabbix服务器重启后,进入zabbix的web发现登录不进去并且网页报mysql的错误,查看mysql的日之后,发现报错: [[email protected] ~]# tail -f /var/log/mysqld.log 140820 16:24:43 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.1.73'  socket: '/var/lib/mysql/mysql.sock'  port: 33

关于MYSQL:外键删除后,查询表发现外键依旧存在,再删一次会报错:原因及相关解决办法

1.创建表test6:外键名为test3_fk mysql> create table test6( -> id int, -> test_name varchar(32), -> constraint test3_fk foreign key(test_name) references student(name) -> ); Query OK, 0 rows affected (0.40 sec) mysql> desc test6; +-----------+---