运行任意SQL命令MySQL C++;(X德瓦皮)? 我已经把我的C++项目连接到MySQL并成功创建了一个会话。我能够创建一个模式。我的问题是,当我尝试运行简单的任意查询时,比如使用testSchema SHOW tables使用MySQL/C++api时,我遇到了SQL语法错误。当我直接在MySQL shell中运行该函数时,查询运行得非常好

运行任意SQL命令MySQL C++;(X德瓦皮)? 我已经把我的C++项目连接到MySQL并成功创建了一个会话。我能够创建一个模式。我的问题是,当我尝试运行简单的任意查询时,比如使用testSchema SHOW tables使用MySQL/C++api时,我遇到了SQL语法错误。当我直接在MySQL shell中运行该函数时,查询运行得非常好,c++,mysql,mysql-x-devapi,C++,Mysql,Mysql X Devapi,这是完整的代码 const char* url = (argc > 1 ? argv[1] : "mysqlx://pct@127.0.0.1"); cout << "Creating session on " << url << " ..." << endl; Session sess(url); { cout << "Connected!&quo

这是完整的代码

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();
}
错误
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第1行“SHOW tables”附近使用的正确语法是MySQL错误,这意味着我在查询中有语法错误,但当我仔细查看一个查询时,我发现它没有错

我已经将cpp文件中的代码直接复制并粘贴到mysql shell中,它运行得非常好。这告诉我在
sql()
函数中输入查询的格式有问题。但是
sql()
函数的文档非常简洁

以下是对sql()函数的引用:

有人能告诉我哪里出了问题吗?这里还有完整的cpp代码,以了解更多上下文:

视窗10 Visual Studio 2019
MySQL 8.0与Connect/C++X DevAPI一起使用,您可以通过两个步骤完成:

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()
不会显示由
Schema::createCollection()
创建的集合。还有一个
模式::getCollections()

for(自动收集:mySchema.getCollections())
{

std::cout您可以通过两个步骤完成:

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()
不显示由
Schema::createCollection()
创建的集合。还有一个
Schema::getCollections()

for(自动收集:mySchema.getCollections())
{

std::cout Thank。这很有效,但看起来只是因为您使用testSchema将查询和SHOW tables分离为两个命令…您知道为什么我的方法不起作用,而您的方法起作用了吗?Session::sql()中不可能使用多个命令好的,我明白了…关于在MySQL中不使用Session::sql()创建表,还有一个问题吗,但我现在将以另一种方式问它,如果没有sql,则不可能创建表…仅创建集合(这是一个具有某些特定属性的表)理解。感谢您的帮助谢谢。这很有效,但看起来只是因为您使用testSchema和SHOW tables将查询分为两个命令…您知道为什么我的方式不起作用和您的方式起作用吗?会话中不可能使用多个命令::sql()好的,我明白了……关于在MySQL中不使用Session::sql()创建表,我还有另一个问题,但我会用另一种方式提问。目前,不使用sql创建表是不可能的……只理解集合(这是一个具有某些特定属性的表)。感谢您的帮助
for(auto table : mySchema.getTables())
{
  std::cout << table.getName() << std::endl;
}
for(auto collection : mySchema.getCollections())
{
  std::cout << collection.getName() << std::endl;
}