Несколько вставок с использованием одного подготовленного состояния в проекте c ++ / mysql - PullRequest
0 голосов
/ 27 марта 2020

У меня есть проект C ++, работающий на Linux и gcc / g ++ 4.8. Я использую MySql база данных версии 5.7 и MySql C ++ соединитель API 1.1.12. Я пытаюсь выполнить две инструкции вставки (каждая для другой таблицы), разделенные точкой с запятой. Я получил это работает для Заявление с, но не для PreparedStatement с. См. Пример кода ниже:

  #include "mysql_connection.h"
  #include <cppconn/driver.h>
  #include <cppconn/exception.h>
  #include <cppconn/resultset.h>
  #include <cppconn/statement.h>
  #include <cppconn/prepared_statement.h>
  ....

  sql::Driver* driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  sql::ConnectOptionsMap options;
  options["hostName"] = "tcp://127.0.0.1";
  options["userName"] = "user";
  options["password"] = "password";
  options["schema"] = "test_db";
  options["port"] = 3306;
  options["CLIENT_MULTI_STATEMENTS"] = true;

  driver = get_driver_instance();
  con = driver->connect(options);

На этом этапе настройки я попытался запустить одну из следующих опций:

  //option 1: works
  stmt = con->createStatement();
  stmt -> execute("INSERT INTO T_TEST1(TEST1) VALUES ('VALUE1');INSERT INTO T_TEST2(TEST2) VALUES ('VALUE2')");

  //option 2: does not work
  sql::PreparedStatement *pstmt = con->prepareStatement("INSERT INTO T_TEST1(TEST1) VALUES ('VALUE1');INSERT INTO T_TEST2(TEST2) VALUES ('VALUE2')");
  pstmt->executeUpdate();

Вариант 1 работает. Вариант 2, но выдает следующую ошибку:

# ERR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO T_TEST2(TEST2) VALUES ('TEST9')' at line 1 (MySQL error code: 1064, SQLState: 42000 )

Есть ли способ заставить вариант 2 работать?

...