Как правильно выполнять несколько запросов одним вызовом функции в MySQL Connector C ++ API? - PullRequest
0 голосов
/ 10 июня 2018

Я новичок в MySQL, также их C ++ API , и у меня возникают проблемы с выполнением нескольких запросов одновременно, вместо того, чтобы дважды вызывать одну и ту же функцию, я имею в виду, что мои запросы вроде как связаны и логически онидолжен быть выполнен сразу.

Я использовал это, например,

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, на предмет правильного синтаксиса для использования рядом со значениями «вставить в ###. Players (имя, имя пользователя, пароль)» («Случайное имя», «imrand» в строке 1

* 1019).*

В MySQL Workbench я могу выполнять несколько запросов одновременно. Почему не в API тоже?

1 Ответ

0 голосов
/ 10 июня 2018

Возможность выполнения нескольких операторов, разделенных точкой с запятой, зависит от того, включено ли свойство соединения 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);
...