代码之家  ›  专栏  ›  技术社区  ›  Beyondo

在MySQL连接器C++API中用一个函数调用执行多个查询的正确方法是什么?

  •  0
  • Beyondo  · 技术社区  · 6 年前

    我是MySQL的新手,也是他们的C++ 美国石油学会 我一次执行多个查询时遇到问题,而不是两次调用同一个函数,我的意思是我的查询有点链接,逻辑上它们应该一次执行。

    例如,我曾经这样做过

    sql::ResultSet* sqlExecute(std::string Query)
    try
    {
        sql::ResultSet *res;
        res = statement->executeQuery(Query);
        return res;
    }
    catch (sql::SQLException& e)
    {
        if (e.getErrorCode())
            outc("%c%s: [SQL %c%d%c]%c %s\n", c_gray, my_time("WARN"), c_dark_purple, e.getErrorCode(), c_gray, c_dark_red, e.what());
        return 0;
    }
    

    像这样称呼它(两次)

    sqlExecute("alter table ###.players AUTO_INCREMENT = 1;");
    sqlExecute("insert into ###.players (name, username, password) values('Random Name', 'imrandom', 'this should be random too');");
    

    但是当我试图用一个函数调用来执行它们时, ;

    sqlExecute("alter table ###.players AUTO_INCREMENT = 1;insert into ###.players (name, username, password) values('Random Name', 'imrandom', 'this should be random too');");
    

    我有例外


    您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获得在'insert in to.players(name,username,password)值(第1行的'random name'、'imrand'附近使用的正确语法。


    在MySQLWorkbench中,我可以一次执行多个查询。为什么不在API中呢?

    1 回复  |  直到 6 年前
        1
  •  2
  •   jspcal    6 年前

    执行由分号分隔的多个语句的能力取决于 CLIENT_MULTI_STATEMENTS 正在启用的连接属性:

    sql::ConnectOptionsMap options;
    options["CLIENT_MULTI_STATEMENTS"] = true;
    
    sql::mysql::MySQL_Driver *driver = sql::mysql::MySQL_Driver::get_mysql_driver_instance();
    sql::Connection *con = driver->connect(options);