运行 任意 SQL 命令 MySQL C++ (X DevAPI)?
Running arbitrary SQL commands MySQL C++ (X DevAPI)?
我已将我的 C++ 项目连接到 MySQL 并成功创建了一个会话。我能够创建一个架构。我的问题是,当我尝试 运行 使用 MySQL/C++ api 之类的简单任意查询时,我 运行 变成了 SQL 语法错误。当我 运行 函数直接在 MySQL shell 中时,查询 运行 完全没问题。
这是完整的代码
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 shell 中,运行 非常完美。这告诉我我在 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
您可以分两步完成:
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()
创建的 Collections。还有一个Schema::getCollections()
:
for(auto collection : mySchema.getCollections())
{
std::cout << collection.getName() << std::endl;
}
我已将我的 C++ 项目连接到 MySQL 并成功创建了一个会话。我能够创建一个架构。我的问题是,当我尝试 运行 使用 MySQL/C++ api 之类的简单任意查询时,我 运行 变成了 SQL 语法错误。当我 运行 函数直接在 MySQL shell 中时,查询 运行 完全没问题。
这是完整的代码
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 shell 中,运行 非常完美。这告诉我我在 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
您可以分两步完成:
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()
创建的 Collections。还有一个Schema::getCollections()
:
for(auto collection : mySchema.getCollections())
{
std::cout << collection.getName() << std::endl;
}