以下代码创建一个名为" test"的表。在POCO:
#include "Poco/Data/Session.h"
#include "Poco/Data/SQLite/Connector.h"
#include <string>
using namespace Poco::Data::Keywords;
using Poco::Data::Session;
int main(int argc, char** argv)
{
Poco::Data::SQLite::Connector::registerConnector();
Session session("SQLite", "test.db");
session << "CREATE TABLE test (id INTEGER)", now;
return 0;
}
我想编写一个函数来创建根据给定参数命名的表。我原本想用
int main(int argc, char** argv)
{
Poco::Data::SQLite::Connector::registerConnector();
Session session("SQLite", "test.db");
std::string name = "test";
session << "CREATE TABLE ? (id INTEGER)", bind(name), now;
return 0;
}
使用通配符并将其替换为给定名称。据我了解,我甚至不需要bind
(复制给定值),use
应该足够,因为语句以now
终止,但无论如何。
无论我使用哪个关键字(use
,bind
,useRef
),程序都会抛出错误或错过数据库&#34;错误。
我还尝试创建Statement
并让它创建表格,但没有变化。
我做错了吗?这次通话不允许使用通配符替换吗?我是否必须手动修改呼叫?
如果它是相关的,可以从我的#includes
推断,我使用SQLite。
答案 0 :(得分:0)
想出来。
使用printf
格式说明符可在此处使用。所以声明应该是
int main(int argc, char** argv)
{
Poco::Data::SQLite::Connector::registerConnector();
Session session("SQLite", "test.db");
std::string name = "test";
session << "CREATE TABLE %s (id INTEGER)", name, now;
return 0;
}
这需要在每次调用时重新编译语句,因此我不确定为什么这是必要的(如果我想创建多个类似的表怎么办?),但 c&#39; est la vie 。