Я подключил свой проект C ++ к MySQL и успешно создал сеанс. Мне удалось создать схему. Моя проблема в том, что когда я пытаюсь выполнить простые произвольные запросы, такие как USE testSchema SHOW tables;, используя MySQL / C ++ api, я сталкиваюсь с синтаксическими ошибками SQL. Когда я запускаю функцию непосредственно в оболочке MySQL, запрос выполняется отлично.

Вот полный код

const char* url = (argc > 1 ? argv[1] : "mysqlx://pct@127.0.0.1");
cout << "Creating session on " << url << " ..." << endl;

Session sess(url);

{
    cout << "Connected!" << endl;

    // Create the Schema "testSchema"; This code creates a schema without issue
    cout << "Creating Schema..." << endl;
    sess.dropSchema("testSchema");
    Schema mySchema = sess.createSchema("testSchema");
    cout << "Schema Created!" << endl;


    // Create the Table "testTable"; This code runs like normal, but the schema doesn't show
    cout << "Creating Table with..." << endl;
    SqlStatement sqlcomm = sess.sql("USE testSchema SHOW tables;");
    sqlcomm.execute();
}

Вот вывод консоли:

Creating session on mysqlx://pct@127.0.0.1 ...
Connected!
Creating Schema...
Schema Created!
Creating Table with...
MYSQL ERROR: CDK Error: 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 'SHOW tables' at line 1

Ошибка 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 'SHOW tables' at line 1 - это ошибка MySQL, которая означает, что у меня есть синтаксическая ошибка в запросе, но когда я внимательно смотрю на запрос, я вижу, что в нем нет ничего плохого.

Я скопировал и вставил код прямо из файла cpp в оболочку mysql, и он отлично работает. Это говорит мне, что что-то не так с форматированием того, как я ввожу запрос в функции sql(). Но документация для функции sql() действительно краткая и.

Вот ссылка на функцию sql (): https : //dev.mysql.com/doc/dev/connector-cpp/8.0/class_session.html#a2e625b5223acd2a3cbc5c02d653a1426

Может ли кто-нибудь дать мне некоторое представление о том, где я ошибаюсь? Также вот полный код cpp для получения дополнительной информации: https://pastebin.com/3kQY8THC

Windows 10 Visual Studio 2019 MySQL 8.0 с Connect / C ++ X DevAPI

0
pctopgs 10 Фев 2021 в 07:04

1 ответ

Лучший ответ

Сделать это можно в два этапа:

sess.sql("USE testSchema").execute();

SqlStatement sqlcomm = sess.sql("SHOW tables");
SqlResult res = sqlcomm.execute();
for(auto row : res)
{
   std::cout << row.get(0).get<std::string>() << std::endl;
}

Также вы можете использовать Schema::getTables():

for(auto table : mySchema.getTables())
{
  std::cout << table.getName() << std::endl;
}

Имейте в виду, что Schema::getTables() не показывает Коллекции, созданные Schema::createCollection(). Также есть Schema::getCollections():

for(auto collection : mySchema.getCollections())
{
  std::cout << collection.getName() << std::endl;
}
2
Luís Silva 10 Фев 2021 в 10:04